Ésta es una cuestión de sintaxis. Tengo una clase genérica que hereda de una clase base genérica y está aplicando una restricción a uno de los parámetros de tipo. También quiero que la clase derivada implemente una interfaz. Por mi vida, parece que no puedo encontrar la sintaxis correcta.
Esto es lo que tengo:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }
Lo primero que me vino a la mente fue esto:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }
Pero eso es incorrecto ya que hace que T2 necesite implementar IBar e IFoo, no DerivedFoo para implementar IFoo.
Probé un poco de búsqueda en Google, uso de dos puntos, punto y coma, etc., pero me quedé corto. Estoy seguro de que la respuesta es increíblemente simple.
c#
generics
inheritance
interface
constraints
Dan Rigby
fuente
fuente
Respuestas:
Incluya la firma completa de su clase antes de definir restricciones genéricas.
fuente
where T2 : IBar, IFoo
solo significa queT2
tiene que implementar ambas interfaces en lugar deDerivedFoo<T1,T2>
implementarIFoo
Mi recomendación: cuando tenga una pregunta sobre la sintaxis del lenguaje C #, lea la especificación; por eso lo publicamos. Querrá leer la sección 10.1.
Para responder a su pregunta específica, el orden de las cosas en una declaración de clase es:
Todo en esa lista es opcional excepto por "clase", el nombre y el cuerpo, pero todo debe aparecer en ese orden si aparece.
fuente
fuente
Esta es una extensión de las respuestas existentes. El valor predeterminado es
string
si no proporciona un tipo. No implementé una interfaz, pero eso no debería requerir nada diferente de lo habitual.fuente