当前位置: 代码迷 >> 综合 >> 多态和接口(5)——设计模式(2)——基于接口编程
  详细解决方案

多态和接口(5)——设计模式(2)——基于接口编程

热度:56   发布时间:2023-10-01 19:43:03.0

一、基于接口编程

1、变量(参数、返回值等)的类型能用父类就不要用子类,能用接口就不要用类,返回值、属性、参数等等,类型越靠近Object越好,尽量不要用具体的类型。只要返回的类型符合签名的要求,就能够随意控制返回的对象。如果将返回值设置为NotNullArrayList,有一点不想控制非空值了,就直接返回ArrayList就可以了。

2、接口中的方法不能声明public、private等,因为没有意义,private是类内部互相调,哪儿来的类内部?接口中能声明:方法,属性,索引器,不能声明字段。接口跟类是平行的。

3、接口的多态。

4、一个接口变量可以指向实现了这个接口的类的对象,不能指向没有实现这个接口的类的对象

5、子类继承父类,也实现了父类已经实现了的接口

6、设计模式。世界上本没有模式,用的人多了,也就有了模式!别把设计模式当成相对论来学!弄明白了多态就明白了设计模式。

7、面试题:接口中能定义什么?接口中可以定义方法、属性、索引器。因为属性、索引器本质上也是方法。接口中不能定义字段,因为字段是实现

8、一个类只能有一个父类,一个类可以实现多个接口。接口只能决定能干什么,怎么干由类来实现

9、

class Program{static void Main(string[] args){//ISpeakable p1 = new Dog();//p1.Speak();ISpeakable p2 = CreateChatter(-1);//接口的优点。不管返回的是什么类型对象,只要能Speak就行p2.Speak();//调用的不是ISpeakable接口的方法,而是p2指向的对象的Speak方法Console.ReadKey();}static ISpeakable CreateChatter(int i){if (i < 0){return new Dog();}else if (i == 0){return new Cat();}else{return new Bird();}}}interface ISpeakable//接口定义的是一种能力。{void Speak();//面试题:接口中能定义什么?//接口中可以定义方法、属性、索引器。因为属性、索引器本质上也是方法。//接口中不能定义字段,因为字段是实现。}interface IFlyable{void Fly();}class Dog : ISpeakable{#region ISpeakable 成员public void Speak(){Console.WriteLine("我是狗狗!");}#endregion}class Cat : ISpeakable{#region ISpeakable 成员public void Speak(){Console.WriteLine("我是猫!");}#endregion}//一个类只能有一个父类//一个类可以实现多个接口。接口只能决定能干什么,怎么干由类来实现class Bird : ISpeakable, IFlyable{#region ISpeakable 成员public void Speak(){Console.WriteLine("我是鸟!");}#endregion#region IFlyable 成员public void Fly(){Console.WriteLine("灰呀灰!");}#endregion}}

二、基于接口编程:Max、排序

10、对List<Person>进行排序,自定义类实现IComparer<Person>接口。

11、IComparer 接口声明:int Compare(T x, T y):<0则x<y;=0则x==y;>0则x>y。

12、list.Max(new PersonComparer())

13、Max方法内部调用实现IComparer接口的对象,调用Compare进行排序,具体如何比较两个对象的大小,则是由实现类决定。

14、重用不变的(排序算法)、定制变化的(大小比较)。

15、开闭原则:对变化开放,对修改封闭

  相关解决方案