在C#方法继承中,这种情况是否可能?

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);
}

我不想在子类方法中每次都将基础参数进行类型转换,那么这种做法可行吗?

2个回答

7

该功能称为形式参数类型协变。它不受c#支持。此外,它也不是类型安全的。

它有两个变体是类型安全的。形式参数逆变和返回类型协变。C#支持这些用于泛型委托转换和方法组到委托转换,但不支持它们用于虚拟方法重写。

很抱歉,你在这里没有运气。


3
不行。参数必须完全匹配。
使用virtual/override的整个目的是通常从基类引用调用方法:
 Base b = ....;
 b.SomeMethod(x);  // might actually call ChildA.SomeMethod() or ChildB.SomeMethod()

1
我接受Eric的答案主要是因为他使用了一些新术语(如正式协变、反变等),让我学到了新知识。非常感谢您快速回答这个问题。 - Jonna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接