C# 派生类的类型转换成员

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

我有一个类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 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> {...}