这种情况在c#方法继承中是否可行

时间:2013-06-05 23:45:21

标签: c# inheritance

我想知道这种情况是否可以在C#继承中使用。

我们假设我们有3个班级。

public class Base
{   
    public abstract void SomeMethod(Base param);
}

public class ChildA : Base
{   
    public override void SomeMethod(ChildA param);
}

public class ChildB : Base
{   
    public override void SomeMethod(ChildB param);
}

我不想每次在子类方法中对基础参数进行类型转换。那么,这可能吗?

2 个答案:

答案 0 :(得分:7)

该特征称为形式参数类型协方差。 c#不支持它。它也不是类型安全的。

它的两个变体是类型安全。形式参数逆变和返回类型协方差。 C#支持通用委托转换和方法组委派转换,但不支持虚拟方法覆盖。

我很害怕你好运。

答案 1 :(得分:3)

没有。参数必须完全匹配。

虚拟/覆盖的整个目的是通常从Base类引用中调用该方法:

 Base b = ....;
 b.SomeMethod(x);  // might actually call ChildA.SomeMethod() or ChildB.SomeMethod()