首页 > 代码库 > C#接口的经典案例

C#接口的经典案例

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.    接口隔离原则