C# 派生类的类型转换成员
我有一个类M和许多派生类a:M,B:M,C:M 派生类A、B、C显然不同,否则它们没有被声明 M实现一个需要知道调用类类型的成员 所以,今天我在m中使用一个抽象成员,并在每个dervied类中单独重写 以M为单位: 以一种方式:C# 派生类的类型转换成员,c#,inheritance,casting,C#,Inheritance,Casting,我有一个类M和许多派生类a:M,B:M,C:M 派生类A、B、C显然不同,否则它们没有被声明 M实现一个需要知道调用类类型的成员 所以,今天我在m中使用一个抽象成员,并在每个dervied类中单独重写 以M为单位: 以一种方式: 这不起作用,因为DoMore()正在对派生类进行强制转换。如果您创建 DoMore method in the base class and make it abstract and override in the
这不起作用,因为
DoMore()
正在对派生类进行强制转换。如果您创建
DoMore method in the base class and make it abstract and override
in the child class so that appropriate method is called
但或多或少,这将是最重要的
和重写Do方法相同,您刚刚将其移动到父类并使其非抽象 如果将基类设置为泛型,则可以使其“意识到”其派生类型:
public class M<T>
{
public Do<T>()
{
DoMore<T>();
}
}
public class A : M<A> {...}
public class B : M<B> {...}
public class C : M<C> {...}
公共类M
{
公营部门()
{
DoMore();
}
}
公共A类:M{…}
公共类B:M{…}
公共类C:M{…}
如果DoMore
需要为每个派生类做一些特定的事情,为什么它不是抽象的/虚拟的?一个“更大”的类型不应该知道它的任何派生类。你确定基类是你真正需要的吗?您是否需要派生类型的特定成员?能否更改DoMore
方法,如void DoMore(Type t)
?
public override void Do()
{
DoMore<B>();
}
public override void Do()
{
DoMore<C>();
}
public Do<T>() {
DoMore<T>();
}
DoMore method in the base class and make it abstract and override
in the child class so that appropriate method is called
public class M<T>
{
public Do<T>()
{
DoMore<T>();
}
}
public class A : M<A> {...}
public class B : M<B> {...}
public class C : M<C> {...}