我有一个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()
正在派生类上进行投射。
答案 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方法相同,您刚刚移动到父类并使其非抽象。