这种情况在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#支持泛型委托转换和方法组委托转换,但不支持虚拟方法覆盖。
恐怕你运气不好
No。参数必须是精确匹配的。
virtual/override的全部目的是,您通常会从基类引用调用该方法:
Base b = ....;
b.SomeMethod(x); // might actually call ChildA.SomeMethod() or ChildB.SomeMethod()