读书人

问一个有关问题关于继承的

发布时间: 2013-10-16 11:29:46 作者: rapoo

问一个问题,关于继承的。
我现在有一个基类 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();
b.FuncB(new ChildA().FuncB);

[解决办法]
基础不牢哦,这个有许多办法实现。

方法1、基类base不要进行细致的处理,由继承的子类各自实现自己功能;
方法2、基类可以实现细致处理方法(要遵循OCP原则),在重写的时候将不同的参数传入;
方法3、将对象引用调用,这样谁执行就为谁办事,也没有必要继承那么多类

这个和接口没有直接联系,因为接口最后也要重新实现的,类似方法1,也是要敲代码的。

读书人网 >C#

热点推荐