Mi imbatto in molte situazioni in cui ho dichiarato un'interfaccia generica e successivamente ho avuto bisogno di una versione non generica di questa interfaccia, o almeno di una versione non generica di alcuni dei metodi o delle proprietà su quell'interfaccia. Generalmente dichiarerei una nuova interfaccia non generica e erediterò l'interfaccia generica. Il problema che sto funzionando in in spettacoli nell'esempio che segue:Interfacce generiche e non generiche
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();
}
}
Dal momento che l'unico modo per dichiarare l'interfaccia iBook (non generico) è esplicitamente, come si fa a ragazzi andare a questo proposito che lo rende astratto?
Questo non risolve il problema, ma non credi che potrebbe avere un senso per renderlo 'Bookbase: IBook , IBook dove T: FormatBase'? Altrimenti, almeno nel tuo semplice esempio, non c'è niente di meglio che avere 'IBook ' invece di solo 'IBook'. –
Hai ragione. Aggiorno il codice. Ma il problema con l'abstract non generico esiste ancora. – BlueChameleon
Otterrai anche un "'IBook .GetFormat()' nasconde il membro ereditato 'IBook.GetFormat()'. Usa la nuova parola chiave se era nascosto il nascondiglio." avvertimento. Ciò è probabilmente dovuto a una scarsa decisione di progettazione da qualche parte, ma senza ulteriori informazioni è difficile dire quale sarebbe un design migliore. –