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

  

最新文章

  1. jvm内存溢出分析
  2. mysqldump:Couldn't execute 'show create table `tablename`': Table tablename' doesn't exist (1146)
  3. htaccess文件还可以被用来把访问网站的流量劫持到黑客的网站
  4. Djunit工作记录Mock时出现为null的情况setReturnValueAt|MockObjectManager.addReturnValue不起作用
  5. jQuery中添加自定义或函数方法
  6. HTML标签的应用(新手)
  7. 数据结构--树状数组(黑龙江省第八届大学生程序设计竞赛--post office)
  8. 【转】virtualbox安装增强包及配置共享文件夹
  9. maven 整理
  10. velocity 字符串 转化为数字
  11. 使用DBUnit实现对数据库的测试
  12. linux搭建phantomjs+webdriver+testng+ant自动化工程
  13. acm课程练习2--1013(同1014)
  14. jquery自定义banner图滚动插件---(解决最后一张图片倒回第一张图片的bug)
  15. JS十种经典排序算法,纯动画演示,学会了怼死面试官!
  16. 分析Hello2代码
  17. Pandas 基础(1) - 初识及安装 yupyter
  18. 【java】类的初识
  19. WAS 手动删除server
  20. jQuery一句话实现全选

热门文章

  1. C89 和 C99的标准比较
  2. <linux下sysctl指令详解>
  3. 一步一步学ZedBoard & Zynq(四):基于AXI Lite 总线的从设备IP设计
  4. jquery的 $(function(){ }) = $(document).ready(function(){ }) ,及页面的加载顺序
  5. 使用FormData上传文件、图片
  6. 基础学习总结(七)--子线程及Handler
  7. 【原】使用ajax的get异常获取数据的时候,IE浏览器总是有缓存
  8. 有趣的checkbox动画切换状态(支付宝转账成功显示)--第三方开源--AnimCheckBox
  9. How to achieve dialog with lookup control
  10. 创建SQL数据库指定文件路径