4

我想知道这种情况在 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);
}

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

4

2 回答 2

7

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

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

恐怕你在这里不走运。

于 2013-06-06T00:12:20.950 回答
3

不可以。参数必须完全匹配。

virtual/override 的全部目的是您通常会从 Base 类引用中调用该方法:

 Base b = ....;
 b.SomeMethod(x);  // might actually call ChildA.SomeMethod() or ChildB.SomeMethod()
于 2013-06-05T23:47:12.307 回答