questa dichiarazione di classe:non possono ereditare con i generici
public abstract class Repository<TE, TD>
where TE : class, IEntity, new()
where TD : DataProvider<TE>
non possono essere soddisfatte da questa firma classe:
public class SqlRepository<TE> : Repository<TE, SqlDataProvider>
where TE : SqlEntity, new()
Dove SqlEntity : IEntity
e SqlDataProvider : DataProvider<SqlEntity>
, ottengo questo errore:
Error 1 The type ~ cannot be used as type parameter 'TD' in the generic type or method '~.Repository'. There is no implicit reference conversion from '~.SqlDataProvider' to '~.DataProvider'.
Perché non può convertire SqlEntity nell'interfaccia che implementa?
Vale anche la pena leggere: http://msdn.microsoft.com/en-us/library/dd799517(v=vs.110).aspx – Haney
Grazie, questo ha risolto il problema. Tuttavia, il motivo per cui non volevo utilizzare un generico per la classe SqlDataProvider era perché volevo utilizzare il modello singleton. Questo causa un avvertimento quando si usa il generic in quanto non ama i campi statici in una classe generica e preferirei che ci fosse solo una istanza di provider di dati colpita dalla compilazione piuttosto che dall'implementazione. è possibile, o dovrò semplicemente lasciare un commento fortemente formulato? – jokulmorder
Non capisco come si possa usare questo per far rispettare un singleton. Potresti aggiornare la tua domanda con il codice pertinente e la descrizione dell'intenzione? –