为什么我不直接在自己的Class 中 把方法 写出来了?要去继承
解决方案 »
- 高分求助:
- WPF listview 控件相关操作
- WebBrowser 中如何屏蔽网页 alert 的对话框,并且获取 alert 对话框内的文本字符串
- 模式窗口中打开模式窗口发生脚本错误
- 如何编译和调试discuz1.1的asp版本
- 100分--以前做WebForm,现在有个案子要用WinForm 开发, 大家给点从WebForm开发到WinForm开发的经验 和 注意点、难点 !谢谢了 !!!
- 用C#怎样向XML文件中写数据例子
- 关于WPF应用程序的文本框输入验证
- 如何激活Excel窗体?窗体是通Excel.ApplicationClass()创建的。
- 如何在statusBar中添加控件?
- C#读取excel中2个sheet
- 请教各位关于怎么实现UDP打洞的问题最终实现P2P通信问题
这是因为好多人都是先做A,然后做一个用来处理A的B,这种做法永远不可能看出接口有什么用。
如果你是先做B,这个B可以对继承基类BaseA(或实现接口IA)的对象进行处理,这样在 真实的A还没有产生之前B就已经做好了,将来不论做出多少种A,B都是不需要修改的。
譬如定义了一个汽车的接口,有轮子,有零件的定义,如果要实现写一个奔驰的类,实现这个接口,就必须实现轮子和零件的定义,如果要再写一个奥迪的类,再继承这个接口,那么也必须实现轮子和零件的定义,如果不用接口,那么我编写了奔驰类,可能只有实现一个轮子的方法,忘记编写零件的方法,不同的程序员编写代码,就有可能出现方法名称不同问题,那么别人调用的时候就会很麻烦。再就像petshop里面的,定义接口,bll层反射动态创建dal层,如果要新增一个不同数据库dal,只要实现已经定义好的接口就行了,如果不实现接口,那么你每次新增一个不同数据库的dal层,那么bll对应也要新增一个。private static readonly IUser dal = DataAccess.CreateInstance<IUser>("UserDal");
{
void a();
}
class test1 : Itest{ void a(){Console.writeline("A");}}
class test2 : Itest{ void a(){Console.writeline("A");}}class t
{
public t(Itest test)
{
test.a();
}
}
这样做在输出结果产生变化的时候。不需要改动t类。
因为interface可以有多种实现,针对于不同的实现代码的功能可以千变万化,而不是永恒不变
变则通
鸟.飞
飞机.飞
鸟人.飞企鹅不实现
所以企鹅.不飞