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 中调用AB,获得不同的打印结果

=====================================
写的不错,不过这个例子还缺少一部分,人家可以说我可以在基类上定义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.    接口隔离原则

 

  

原文地址:https://www.cnblogs.com/alphafly/p/3815037.html