É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, IFoosolo significa queT2tiene que implementar ambas interfaces en lugar deDerivedFoo<T1,T2>implementarIFooMi 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
stringsi no proporciona un tipo. No implementé una interfaz, pero eso no debería requerir nada diferente de lo habitual.fuente