2012-02-01 27 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

相关问题