这种情况在c#方法继承中可能吗?

本文关键字:继承 方法 情况 | 更新日期: 2023-09-27 18:17:03

我想知道这种情况在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);
}
我不想每次都在子类方法中对基参数进行类型转换。那么,这可能吗?

这种情况在c#方法继承中可能吗?

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

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

恐怕你运气不好

No。参数必须是精确匹配的。

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

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