关键词搜索

源码搜索 ×
×

C#VS面向对象基础(二)

发布2012-11-27浏览5285次

详情内容

      这里我们接着上一篇博客,继续学习用C#实现面向对象中的概念。这里学习下边几个,当然我们还是通过动物比赛的例子。

 

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

 

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

 

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

 

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

 

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

 

    下边我们通过这个例子来理解上边的概念:

 

    定义类和接口的代码:

 

  1. abstract class Animal//利用关键字abstract定义了一个抽象类
  2. {
  3. protected string name = "";
  4. public Animal(string name)
  5. {
  6. this.name = name;
  7. }
  8. public Animal()
  9. {
  10. this.name = "无名";
  11. }
  12. protected int shoutNum = 6;//叫声的次数
  13. public int ShoutNum
  14. {
  15. get
  16. {
  17. return shoutNum;
  18. }
  19. set
  20. {
  21. shoutNum = value;
  22. }
  23. }
  24. public string shout()//叫声发出的代码
  25. {
  26. string result = "";
  27. for (int i = 0; i < shoutNum; i++)
  28. result += getshoutsound() + ", ";//调用了getshoutsound的虚方法
  29. return "我的名字叫"+ name + ""+result ;
  30. }
  31. protected virtual string getshoutsound()//修饰符virtual表示此方法为虚方法,可以被子类重写
  32. {
  33. return "";
  34. }
  35. }
  36. //定义不同的子类,来实现父类,其实就是多态的很好体现
  37. class Cat:Animal //子类猫
  38. {
  39. public Cat():base()
  40. {}
  41. public Cat (string name):base (name)
  42. {}
  43. protected override string getshoutsound()
  44. {
  45. return"喵";
  46. }
  47. }
  48. class Dog : Animal//子类狗
  49. {
  50. public Dog()
  51. : base()
  52. { }
  53. public Dog(string name)
  54. : base(name)
  55. { }
  56. protected override string getshoutsound()
  57. {
  58. return "喵";
  59. }
  60. }
  61. class Cattle : Animal//子类牛
  62. {
  63. public Cattle()
  64. : base()
  65. { }
  66. public Cattle(string name)
  67. : base(name)
  68. { }
  69. protected override string getshoutsound()
  70. {
  71. return "哞";
  72. }
  73. }
  74. class sheep:Animal//子类羊
  75. {
  76. public sheep ():base()
  77. {}
  78. public sheep(string name)
  79. : base(name)
  80. { }
  81. protected override string getshoutsound()
  82. {
  83. return "咩";
  84. }
  85. }
  86. interface Ichange//定义了一个接口
  87. {
  88. string changething(string thing);
  89. }
  90. class Machinecat : Cat, Ichange//定义了个机器猫,继承父类猫,并使用了接口Ichange
  91. {
  92. public Machinecat()
  93. : base()
  94. { }
  95. public Machinecat(string name)
  96. : base(name)
  97. { }
  98. public string changething(string thing)
  99. {
  100. return base.shout ()+ "我有万能口袋,我可以变出:" + thing;
  101. }
  102. }


下边是客户端的代码:

  1. //private Animal[] arrayAnimal;//声明一个动物数组
  2. //集合的使用
  3. IList<Animal> arrayAnimal;//声明一个泛型集合变量,用接口Ilist,注意Ilist<Animal>表示此集合变量只能接受Animal类型
  4. //猫叫的按钮事件
  5. private void button1_Click(object sender, EventArgs e)
  6. {
  7. Cat cat = new Cat("咪咪"); //类的实例化
  8. cat.ShoutNum = 7;
  9. MessageBox.Show(cat.shout());
  10. }
  11. //狗叫的按钮事件
  12. private void button2_Click(object sender, EventArgs e)
  13. {
  14. Dog dog = new Dog("旺财");//这里只是简单的调用方法,即可实现目的,体现了封装的特性
  15. dog.ShoutNum = 6;
  16. MessageBox.Show(dog.shout());
  17. }
  18. //动物报名的按钮
  19. private void button3_Click(object sender, EventArgs e)//动物报名按钮,
  20. {
  21. //arrayAnimal = new Animal[5];//实例化最多可以可报名5个的动物数组对象
  22. arrayAnimal = new List<Animal> ();//实例化List对象
  23. arrayAnimal.Add(new Cat ("小花"));//报名分别是猫和狗
  24. arrayAnimal.Add( new Dog("阿毛"));
  25. arrayAnimal.Add ( new Dog("小黑"));
  26. arrayAnimal.Add(new Cat("娇娇"));
  27. arrayAnimal.Add( new Cat("咪咪"));
  28. MessageBox.Show(arrayAnimal.Count.ToString());//打印出我们添加的个数
  29. arrayAnimal.RemoveAt(1);//这里还可以删除我们多添加的。
  30. }
  31. //让报名的所有动物进行叫声比赛
  32. private void button4_Click(object sender, EventArgs e)
  33. {
  34. foreach (Animal item in arrayAnimal)//遍历整个数组,让他们一次实施shout的方法
  35. {
  36. MessageBox.Show(item.shout());
  37. }
  38. }
  39. //叮当猫变出东西的事件代码
  40. private void button5_Click(object sender, EventArgs e)
  41. {
  42. Machinecat mcat = new Machinecat("叮当");//实例化机器猫
  43. Machinecat mcat1 = new Machinecat("叮当2");
  44. Ichange[] array = new Ichange[2];//声明一个接口数组,将两个实例赋值给数组
  45. array[0] = mcat;
  46. array [1]=mcat1;
  47. MessageBox.Show(array[0].changething("各种各样的东西!"));//利用多态性,实现不同的changething
  48. MessageBox .Show (array[1].changething ("好多好多东西哈!"));
  49. }

      这个学习也是非常基础的,学习设计模式的基础!

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载