C#接口(interface)实例子(简单而经典)2008/12/04 10:04using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace AppTest { class Demo_interface { static void Main(string[] args) { //使用(注意,这里是使用接口 IPrint,下面是不同的实例,获得不同功能) IPrint I; I = new A(); //实例化 A,将打印出 A I.Print(); I = new B(); //实例化 B,将打印出 B I.Print(); Thread.Sleep(3 * 1000); //暂停3秒,看打印结果 } } //定义接口,定义后不需要改变,需要不同功能,继承时扩展即可 interface IPrint { //接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法; //支持多继承;可以用于支持回调;可以作用于值类型和引用类型;C#中不能包含任何静态成员 //不能被直接实例化,可以通过继承实现其抽象方法。 void Print();//只定义,不实现 //IPerson(); //错误 //string name; //错误 //public void GetIDcard(); //错误 //void GetName(); //正确 //void GetAge(string s); //正确 //int GetHeight(); //正确 } //A 继承接口 class A : IPrint { //实现接口方法,必须有, //当然还可以再添加其它的字段、属性、方法 public void Print() { System.Console.WriteLine("A"); } } //B 继承接口 class B : IPrint { public void Print() { System.Console.WriteLine("B"); } } } //在这个例子中,IPrint 接口中定义了Print方法,但没有实现方法体. //类A和类B都继承了IPrint接口,并且实现了不同的Print方法. //在Main 中调用A\B,获得不同的打印结果 ===================================== 写的不错,不过这个例子还缺少一部分,人家可以说我可以在基类上定义Print(),PrintPreview() 2个虚函数,让后续不同打印机的类继承这个基类,override 虚函数,然后通过基类指针一样可以实现这个功能。 如果你这么说,如果要给HP打印机和IBM打印机增加一个新功能如Scan(),如果用基类虚函数就得重新修改基类,基类修改会影响到所有继承他的类,系统成型后修改基类是非常危险的,而用接口只需让HP的,IBM的打印类再继承一个IScan接口就行了,不会影响到其他类,这就是接口优越于虚函数的地方。 五大面向对象设计原则 单一职责原则 2. 开放封闭原则 3. 里氏替换原则 定义:如果对于类型S的每一个对象o1,都有一个类型T的对象o2,使对于任意用类型T定义的程序P, 将o2替换为o1,P的行为保持不变,则称S为T的一个子类型。 4. 依赖倒置原则 5. 接口隔离原则
C#接口的经典案例
时间: 2024-10-24 17:06:53