我想知道这种情况是否可以在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);
}
我不想每次在子类方法中对基础参数进行类型转换。那么,这可能吗?
答案 0 :(得分:7)
该特征称为形式参数类型协方差。 c#不支持它。它也不是类型安全的。
它的两个变体是类型安全。形式参数逆变和返回类型协方差。 C#支持通用委托转换和方法组委派转换,但不支持虚拟方法覆盖。
我很害怕你好运。
答案 1 :(得分:3)
没有。参数必须完全匹配。
虚拟/覆盖的整个目的是通常从Base类引用中调用该方法:
Base b = ....;
b.SomeMethod(x); // might actually call ChildA.SomeMethod() or ChildB.SomeMethod()