博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C#面向对象2
阅读量:5720 次
发布时间:2019-06-18

本文共 4977 字,大约阅读时间需要 16 分钟。

 多态:表示不同的对象可以执行相同的动作,但是通过它们自己的实现代码来执行。这里需要将父类将该成员声明为虚拟的,而且用到了方法重写(override).

 

     抽象类:用abstract声明抽象类,注意抽象类不能实例化,抽象方法必须被子类重写。

 

      接口:是把隐式公共方法和属性组合起来,以封装特定的功能的一个集合,一旦类实现了接口,就可以支持接口所指定的所有属性好成员。一个类可以支持多个接口,多个类也可以支持相同的接口。

 

      集合:是优于数组,.NET Framework提供了用于数据存储和检索的专用类。集合随着我们向里边添加元素而自动增加,自动调节大小。提供了对堆栈,队列和哈希表的支持。

 

     泛型:具有占位符(即参数类型)的类,结构,接口和方法。和集合紧密联系,泛型集合可以获得类型安全的直接优点。也就是说类型固定了。

 

 定义类和接口的代码:

    abstract class Animal//利用关键字abstract定义了一个抽象类      {          protected string name = "";          public Animal(string name)          {              this.name = name;          }          public Animal()          {              this.name = "无名";          }            protected int shoutNum = 6;//叫声的次数          public int ShoutNum          {              get              {                  return shoutNum;              }              set              {                  shoutNum = value;               }          }              public string shout()//叫声发出的代码          {              string result = "";              for (int i = 0; i < shoutNum; i++)                   result += getshoutsound() + ", ";//调用了getshoutsound的虚方法                  return "我的名字叫"+ name + ""+result ;             }          protected virtual string getshoutsound()//修饰符virtual表示此方法为虚方法,可以被子类重写          {              return "";          }      }              //定义不同的子类,来实现父类,其实就是多态的很好体现      class Cat:Animal //子类猫      {          public Cat():base()          {}          public Cat (string name):base (name)          {}          protected override string getshoutsound()          {              return"喵";          }      }          class Dog : Animal//子类狗      {          public Dog()              : base()          { }          public Dog(string name)              : base(name)          { }          protected override string getshoutsound()          {              return "喵";          }      }          class Cattle : Animal//子类牛      {          public Cattle()              : base()          { }          public Cattle(string name)              : base(name)          { }          protected override string getshoutsound()          {              return "哞";          }      }          class sheep:Animal//子类羊      {          public sheep ():base()          {}          public sheep(string name)              : base(name)          { }          protected override string getshoutsound()          {             return "咩";          }      }          interface Ichange//定义了一个接口      {          string changething(string thing);      }          class Machinecat : Cat, Ichange//定义了个机器猫,继承父类猫,并使用了接口Ichange      {          public Machinecat()              : base()          { }          public Machinecat(string name)              : base(name)          { }          public string changething(string thing)          {              return base.shout ()+ "我有万能口袋,我可以变出:" + thing;          }      }

下边是客户端的代码:

        //private Animal[] arrayAnimal;//声明一个动物数组          //集合的使用         IList
arrayAnimal;//声明一个泛型集合变量,用接口Ilist,注意Ilist
表示此集合变量只能接受Animal类型 //猫叫的按钮事件 private void button1_Click(object sender, EventArgs e) { Cat cat = new Cat("咪咪"); //类的实例化 cat.ShoutNum = 7; MessageBox.Show(cat.shout()); } //狗叫的按钮事件 private void button2_Click(object sender, EventArgs e) { Dog dog = new Dog("旺财");//这里只是简单的调用方法,即可实现目的,体现了封装的特性 dog.ShoutNum = 6; MessageBox.Show(dog.shout()); } //动物报名的按钮 private void button3_Click(object sender, EventArgs e)//动物报名按钮, { //arrayAnimal = new Animal[5];//实例化最多可以可报名5个的动物数组对象 arrayAnimal = new List
();//实例化List对象 arrayAnimal.Add(new Cat ("小花"));//报名分别是猫和狗 arrayAnimal.Add( new Dog("阿毛")); arrayAnimal.Add ( new Dog("小黑")); arrayAnimal.Add(new Cat("娇娇")); arrayAnimal.Add( new Cat("咪咪")); MessageBox.Show(arrayAnimal.Count.ToString());//打印出我们添加的个数 arrayAnimal.RemoveAt(1);//这里还可以删除我们多添加的。 } //让报名的所有动物进行叫声比赛 private void button4_Click(object sender, EventArgs e) { foreach (Animal item in arrayAnimal)//遍历整个数组,让他们一次实施shout的方法 { MessageBox.Show(item.shout()); } } //叮当猫变出东西的事件代码 private void button5_Click(object sender, EventArgs e) { Machinecat mcat = new Machinecat("叮当");//实例化机器猫 Machinecat mcat1 = new Machinecat("叮当2"); Ichange[] array = new Ichange[2];//声明一个接口数组,将两个实例赋值给数组 array[0] = mcat; array [1]=mcat1; MessageBox.Show(array[0].changething("各种各样的东西!"));//利用多态性,实现不同的changething MessageBox .Show (array[1].changething ("好多好多东西哈!")); }

 

转载于:https://www.cnblogs.com/nwj-0613/p/4827952.html

你可能感兴趣的文章
ext2磁盘布局
查看>>
MySql数据库2【常用命令行】
查看>>
安装、进程-云计算学习笔记---hadoop的简介,以及安装,用命令实现对hdfs系统进行文件的上传下载-by小雨...
查看>>
动态规划---->货郎担问题
查看>>
添加虚拟子网
查看>>
Ubuntu 12.04 root用户登录设置
查看>>
存储过程点滴
查看>>
Maven编译跳过test的设置
查看>>
SQLyog图形化l数据库的操作和学习
查看>>
raspbian 怎么才能有声音?
查看>>
[LeetCode]22.Generate Parentheses
查看>>
《数据结构》—— 线性表(上)
查看>>
WEB前端 CSS选择器
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
计算A/B Test需要的样本量
查看>>
有力证据
查看>>
二叉树前序中序后序遍历的非递归方法
查看>>
nginx+tomcat实现负载均衡
查看>>
mysql 行转列列转行
查看>>
《设计模式系列》---桥接模式
查看>>