2016-04-20 63 views
0

我對不同的繼承/抽象交互感到困惑。 可以說,我有一個名爲BaseClass一定的階級,現在這個基類我有多個inherrited派生類,InherritedBaseClassA等。使用繼承類中的[derived-from-baseclass-property]覆蓋[abstract class]中的[abstract baseclass property]

class BaseClass 
{ 
    int SomeGenericProperties {get; set;}  
} 
class InherritedBaseClassA : BaseClass 
{ 
    int PropertyOnlyInA {get; set;} 
} 
class InherritedBaseClassB : BaseClass 
{ 
    int PropertyOnlyInB {get; set;} 
} 

現在,我想這BaseClass添加爲一個屬性爲abstract類:

abstract class AbstractBase 
{ 
    public abstract Baseclass MyProperty {get;set;} 
} 

最後,我想,我在執行這個abstract類,重寫此BaseClassDerived類。

class Implementation_A_OfAbstractBase : AbstractBase 
{ 
    // how do i write this line? 
    public override InherritedBaseClassA MyProperty; 
} 

我想這樣做,因爲在我的代碼的其他地方我有AbstractBase一個通用的列表,有時我想進入電影AbstractBase.MyProperty.SomeGenericProperties而存在,無論是從BaseClass inherrited什麼用樣inherrited基類實現即時的,因爲他們的MyProperty

回答

1

你將需要使用C#泛型來解決這個問題。

的快速實現是這樣的:

abstract class AbstractBase<T> where T: Baseclass 
{ 
    public abstract T MyProperty { get; set;} 
} 

class Implementation_A_OfAbstractBase : AbstractBase<InherritedBaseClassA>   
{ 
    //you no longer need to override the property, the generic type takes care of this for you. 
} 

要注意where T: Baseclass這是要告訴大家,這個類型指定將始終以繼承Baseclass和彙編編譯器,如果你試圖將真正失敗是非常重要的使用一個沒有的類型。

另外here is some additional reading on generics.

0

您需要爲此使用泛型。

例如:

abstract class AbstractBase<T> 
    where T : BaseClass 
{ 
    public abstract T MyProperty { get; set; } 
} 

abstract class AbstractBase : AbstractBase<BaseClass> 
{ 
} 

class Implementation_A_OfAbstractBase : AbstractBase<InherritedBaseClassA> 
{ 
    public override InherritedBaseClassA MyProperty { get; set; } 
}