2013-06-05 64 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