2013-07-01 111 views
0

我有對象BaseObject和DerivedObject。 然後我想給BaseObject一個BaseContainer, 並給DerivedObject一個DerivedContainer。並行繼承

(DerivedObject:BaseObject,DerivedContainer:BaseContainer)

例如,使用關鍵字new

BaseObject:

公共BaseContainer集裝箱{得到;設置;}

DerivedObject:

public new DerivedContainer Container 
{ 
    get { return (DerivedContainer)base.Container; } 
    set { base.Container = value; 
     //Some extra things that MUST be called 
     } 
} 

virtualoverride將無法​​正常工作,因爲你不能改變返回類型(get;失敗)。 new不起作用,如果我做((BaseObject)myDerivedObject).Container = something,因爲它不調用DerivedObject.Container__set中的額外代碼(註釋部分)。

我知道我可以使屬性get只使用new,並添加一個虛擬setter方法(返回類型無效,所以我可以覆蓋它),但我想知道是否有任何解決方法。

回答

1

您可以使用泛型。

class Base<TContainer> where TContainer : Container 
{ 
    TContainer Container { get; set; } 
} 

class Derived : Base<DerivedContainer> { }