问一个问题,关于继承的。
我现在有一个基类 Base,
若干个子类 ChildA,ChildB,ChildC,D,E,F 等等......
现在 在程序中访问 子类 A B C,.... 以及调用子类的方法的时候都是通过基类的对象访问的 :
Base base.FuncA().....
现在 我想在 子类中增加一个方法,FuncB用来定义另一种行为,但是 并不是 所有的 子类都需要实现这种行为,比如:
子类 A、B、C,在实现FuncB的时候,有各自不同处理逻辑,
子类 D、E的在FuncB中的处理逻辑行为一样,
子类 F、G则不需要实现FuncB的处理逻辑,
。。。
如果这样的话,改将FuncB放在哪个类里面定义呢?
1、在基类Base中定义?
2、还是另外定义一个接口,让需要实现FUncB方法的子类继承自这个接口?
3、???
如果 2 的话,就不能同过基类base的对象访问了...
如何设计呢??
------解决方案--------------------base只能访问到自己的方法列表。所以,想要base能调用funtionB,那么必须在base中有所定义。而只要继承了base的类,都会有functionB.
所以,F,G中也会有functionB,所以我觉得你的需求实现不了。但你可以override它,什么也不做。
------解决方案--------------------这种情况的话要么实现一个接口(你的2里面),要么实现一个delegate(委托),这样你就可以在自己的子方法中去实现各种逻辑了,在设计的时候不涉及到子类,只有在客户端调用的时候才会有对子类的依赖,委托实现如下:
public delegate void FuncBDel();
public class Base
{
public void FuncA()
{
Console.WriteLine("Base.FuncA();");
}
public void FuncB(FuncBDel delOfFuncB)
{
delOfFuncB();
}
}
public class ChildA : Base
{
public void FuncB()
{
Console.WriteLine("ChildA.FuncB();");
}
}
public class ChildB : Base
{
public void FuncB()
{
Console.WriteLine("ChildB.FuncB();");
}
}
public class ChildC : Base
{
public void FuncB()
{
Console.WriteLine("ChildC.FuncB();");
}
}
Base b = new ChildA();
b.FuncA();
&nb