派生类的Type-Cast成员

时间:2015-01-04 07:40:03

标签: c# inheritance casting

我有一个M类和许多派生类A:M,B:M,C:M

派生类A,B,C明显不同,否则它们没有被声明。

M实现了一个需要知道调用类类型的成员。

所以,今天我在M中使用了一个抽象成员,并在每个衍生的类中单独覆盖。

在M:

public abstract Do() {};

在A:

public override void Do()
{
    DoMore<A>();
}

在B:

public override void Do()
{
    DoMore<B>();
}

在C:

public override void Do()
{
    DoMore<C>();
}

有没有办法在Do()中为所有派生类实现一次M?类似的东西:

在M:

public Do<T>() {
    DoMore<T>();
}

这不起作用,因为DoMore()正在派生类上进行投射。

2 个答案:

答案 0 :(得分:2)

如果使基类具有通用性,则可以使其“了解”其派生类型:

public class M<T> 
{
    public Do<T>() 
    {
        DoMore<T>();
    }
}

public class A : M<A> {...}
public class B : M<B> {...}
public class C : M<C> {...}

答案 1 :(得分:0)

如果您创建

,将会有可能
             DoMore method in the base class and make it abstract and override 
             in the child class so that appropriate method is called 

但或多或少会是                  与覆盖Do方法相同,您刚刚移动到父类并使其非抽象。