2012-02-01 11 views
6

Esencialmente, lo que quiero hacer es implementar una clase que pueda contener una lista de referencias a instancias del mismo tipo. Algo así como lo siguiente:¿Se puede definir una interfaz tal que una clase que la implemente debe contener un miembro que también sea de esa clase?

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

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

sé que esto no se compilará porque la interfaz dice explícitamente mi Settings debe ser del tipo List<IAccessibilityFeature>. Lo que busco es una guía sobre la forma correcta de lograr lo que estoy tratando de hacer en la clase MyAccess.

+2

Tome un vistazo a http://msdn.microsoft.com/en-us/library/kwtft8ak(v= vs.80) .aspx –

+0

Cheers Tom, lectura interesante :) –

+4

Tenga en cuenta que ninguna de las respuestas actualmente visibles en realidad * requiere * que la clase implementadora proporcione * itself * como el parámetro de tipo T. En última instancia, depende de usted hacer cumplir la requisito estricto, el sistema de tipo no puede hacerlo por usted. –

Respuesta

14

Prueba esto:

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

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

+1 - Buen toque con la restricción genérica. –

+0

Hermoso, muchas gracias por eso! –

+0

YW. He usado este patrón muchas veces yo mismo. – ja72

3

Esto podría hacerse con:

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

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

Muchas gracias M.Babcock! –

Cuestiones relacionadas