Me encuentro con muchas situaciones en las que he declarado una interfaz genérica y luego necesité una versión no genérica de esta interfaz, o al menos una versión no genérica de algunos de los métodos o propiedades en esa interfaz. Normalmente declaro una nueva interfaz no genérica y la heredo de la interfaz genérica. El problema que estoy en en espectáculos en el ejemplo siguiente:Interfaces genéricas y no genéricas
public abstract class FormatBase { }
public interface IBook<F> where F : FormatBase
{
F GetFormat();
}
public interface IBook
{
object GetFormat();
}
public abstract class BookBase : IBook<FormatBase>, IBook
{
public abstract FormatBase GetFormat();
object IBook.GetFormat()
{
return GetFormat();
}
}
Dado que la única manera de declarar la interfaz IBook (no genérico) es explícitamente, ¿cómo ir ustedes acerca de lo que es abstracto?
esto no soluciona el problema, pero ¿no te parece que podría tener sentido para que sea 'BookBase: IBook , IBook donde T: FormatBase'? De lo contrario, en su ejemplo simple, al menos, hay poco o ningún beneficio con 'IBook ' en lugar de simplemente 'IBook'. –
Tienes razón. Actualizo el código. Pero el problema con el resumen no genérico aún existe. – BlueChameleon
También obtendrá un "'IBook. GetFormat()' oculta el miembro heredado 'IBook.GetFormat()'. Use la nueva palabra clave si se intentó ocultar". advertencia. Esto probablemente se deba a una decisión de diseño deficiente en alguna parte, pero sin más información es difícil decir qué diseño sería mejor. –