zoukankan      html  css  js  c++  java
  • 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.    接口隔离原则
    
     
    

      

  • 相关阅读:
    idea常用快捷键
    Spring中<bean>标签之使用p标签配置bean的属性
    Mysql语句转义
    Idea使用(摘抄至java后端技术公众号-孤独烟)
    js中scroll滚动相关
    Flask-wtforms类似django中的form组件
    Flask中的数据连接池
    SQLAlchemy
    博客园美化阅读模式
    [NOIP2003] 提高组 洛谷P1039 侦探推理
  • 原文地址:https://www.cnblogs.com/alphafly/p/3815037.html
Copyright © 2011-2022 走看看