En el marco NET, hay un IEnumerable<T>
interfaz genérica que hereda de la no-genérico IEnumerable
, y ambos tienen un método GetEnumerator()
. Los únicos diferentes entre estos dos GetEnumerator()
es el tipo de devolución. Ahora tienen un diseño similar, pero cuando compilar el código, el compilador dijo: 'miembro de cueros heredada'IEnumerable.GetEnumerator() y IEnumerable <T> .GetEnumerator()
MyInterface<T>.GetItem()
MyInterface.GetItem()
'. Usa la nueva palabra clave si te intentabas esconder.
MyInterface<T>.GetItem()
devuelve un tipo concreto T, mientras que MyInterface.GetItem()
devuelve tipo System.Object.
Así que creo que si los chicos del equipo BCL compilan el .NET Framework, recibirán la misma advertencia.
Creo que tener advertencias de compilador no es bueno, ¿qué opinas? ¿Y cómo puedo resolver este problema? Quiero decir que quiero obtener el tipo concreto T cuando llamo al MyInterface<T>.GetItem()
no solo una instancia de tipo System.Object.
¡Gracias de antemano! :-)
Suplemento: que digo las interfaces de theirselves: IMyInterface hereda de IMyInterface, y ambos tienen el método GetItem() (el IMyInterface.GetItem() devuelve tipo T, mientras que IMyInterface. GetItem() devuelve tipo System.Object). El problema es que, si nuestro código solo tiene estas dos interfaces, es decir, no hay clases concretas derivadas, nos encontraremos con la advertencia del compilador después de compilar el código fuente.
Hola, no estoy diciendo esto, por favor vea mi "Suplemento" en la publicación. Gracias :) –
+1 aunque no se puede especificar el nivel de acceso para una implementación de interfaz explícita – erikkallen
@Dylan: utilice la nueva palabra clave como recomienda el compilador. Ver mis ediciones arriba. –