如题,看很多源代码中都是实例化子类,然后定义的是它的父类类型,不明白这样做有什么好处呢。
我写了个大致例子
public partial class Form1 : Form
{
private father _father;
public Form1()
{
InitializeComponent();
this._father = new sun();
}
} abstract class father
{
protected int a = 10;
public void b()
{
}
protected abstract void c();
}
class sun : father
{
public void d()
{
}
protected override void c()
{
}
}
_father 对象定义的即是父类的类型,但实际上是实例化了子类。很奇怪为什么常常这样做,这样做有什么好处呢,在什么情况下需要这么做呢?在这里向大家请教了
我写了个大致例子
public partial class Form1 : Form
{
private father _father;
public Form1()
{
InitializeComponent();
this._father = new sun();
}
} abstract class father
{
protected int a = 10;
public void b()
{
}
protected abstract void c();
}
class sun : father
{
public void d()
{
}
protected override void c()
{
}
}
_father 对象定义的即是父类的类型,但实际上是实例化了子类。很奇怪为什么常常这样做,这样做有什么好处呢,在什么情况下需要这么做呢?在这里向大家请教了
解决方案 »
- c#listview显示数据库数据问题
- 帮忙找一下错误,不可思议!
- Tao framework下怎么用OpenGL扩展函数?!
- 调用webservice,报类型不匹配错误
- 登录后显示相关信息
- .NET中有程序存储区么,函数执行时内存是怎么样的,请达人们指教。
- PropertyGrid自定义显示属性
- GridView 中动态插入一列,导致 GridView 中该列前面的模板列出错
- 请教:调用API 传送数据,但是只有第一次Sendmessge成功,再次send就不行了。
- RichTxetBox 中怎么保存添加的控件
- C# windows窗体 控件的问题,在线等,急!!
- 虚心请教一个关于事件的问题……
假如程序本来用的你的son类,现在要用sonA,或者sonB,或者sonC,是不是换一个你得改一下代码!
按照开放封闭原则,这不好。
如果程序里用的是father类,就不用改了。
程序本来是依赖son,或者sonA,或者sonB,或者sonC,
改用father后,程序只依赖父类father了,反而是你的子类是依赖父类father的,这样依赖就倒过来了。
2、抽象不应该依赖于细节,细节应该依赖于抽象。这里说的“依赖”是使用的意思,如果你调用了一个类的一个方法,就是依赖这个类,如果你直接调用这个类的方法,就是依赖细节,细节就是具体的类,但如果你调用的是它父类或者接口的方法,就是依赖抽象,所以DIP说白了就是不要直接使用具体的派生类,不要直接用派生类的引用去调用派生类的方法,而是用它的父类的引用去调用派生类的方法,这样就是依赖于抽象,不依赖具体,