2012-02-01 28 views
6

基本上我想要做的是實現一個類,它可以包含對同一類型實例的引用列表。像下面這樣:您可以定義一個接口,使得實現它的類必須包含也是該類的成員?

interface IAccessibilityFeature 
{ 
    List<IAccessibilityFeature> Settings { get; set; } 
} 

class MyAccess : IAccessibilityFeature 
{ 
    List<MyAccess> Settings { get; set; } 
} 

我知道這不會編譯,因爲接口明確說我Settings的類型必須爲List<IAccessibilityFeature>的。我所追求的是一些關於如何在MyAccess課程中實現我想要做的正確方法的指導。

+2

在http://msdn.microsoft.com/en-us/library/kwtft8ak(v=看看vs.80).aspx – 2012-02-01 01:56:13

+0

乾杯湯姆,有趣的閱讀:) – 2012-02-01 02:17:09

+4

請注意,目前看不到的答案實際上*要求*實現類提供*本身*作爲類型參數T.它最終取決於您執行嚴格的要求,類型系統不能爲你做。 – 2012-02-01 02:22:02

回答

14

試試這個:

interface IAccessibilityFeature<T> where T : IAccessibilityFeature<T> 
{ 
    List<T> Settings { get; set; } 
} 

class MyAccess : IAccessibilityFeature<MyAccess> 
{ 
    List<MyAccess> Settings { get; set; } 
} 
+3

+1 - 與通用約束很好的接觸。 – 2012-02-01 02:05:42

+0

美麗,非常感謝! – 2012-02-01 02:16:35

+0

YW。我自己多次使用過這種模式。 – ja72 2012-02-01 02:17:48

3

這可以通過做:

interface IAccessibilityFeature<T> 
{ 
    List<T> Settings { get; set; } 
} 

class MyAccess : IAccessibilityFeature<MyAccess> 
{ 
    List<MyAccess> Settings { get; set; } 
} 
+0

非常感謝M.Babcock! – 2012-02-01 02:16:52

相關問題