【发布时间】:2015-01-04 16:24:49
【问题描述】:
我有一个类 M 和许多派生类 A:M、B:M、C:M
派生类A、B、C明显不同,否则没有被声明。
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>();
}
有没有办法在M 中为所有派生类实现一次Do()?比如:
中号:
public Do<T>() {
DoMore<T>();
}
这不起作用,因为 DoMore() 正在对派生类进行强制转换。
【问题讨论】:
-
如果
DoMore需要为每个派生类做一些特定的事情,为什么它不也是抽象/虚拟的? -
一个“更大”的类型不应该知道它的任何派生一次。您确定基类是您真正需要的吗?您需要派生类型的特定成员吗?
-
你能像
void DoMore(Type t)这样改变DoMore的方法吗?
标签: c# inheritance casting