2013-06-05 65 views
4

我想知道如果这种情况是可能的C#继承。这种情况下可能在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); 
} 

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

回答

6

这个功能被称为形式参数类型的协方差。它不被c#支持。它也不是类型安全的。

它的两种变体是类型安全的。形式参数反变换和返回类型协方差。 C#不支持泛型委托转换和方法组委托转换,但不支持虚方法重写。

你在这里运气不好,我很害怕。

3

否。参数必须完全匹配。

虚拟/覆盖的全部目的是,你通常会从基类引用调用方法:

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

我接受Eric的回答的主要原因是因为我从他使用的术语(正式协方差,逆变等)中学到了一些新东西。非常感谢您快速回复此问题。 – Jonna