Sto cercando un modo per ereditare i generici con parametrizzazioni ereditate - o se ciò non è possibile, il modo più vicino per ottenere la stessa funzionalità.Ereditare i generici con parametrizzazioni ereditate
Si consideri il seguente:
classe B eredita dalla classe A
Classe D eredita dalla classe C
Ora, ho una classe:
abstract class A<T> where T : C
con il costruttore:
public A(T t)
Ora, desidero estendere la classe A come così:
class B<D> : A<C>
Creazione di un costruttore:
public B(D t) : base(t){ /*stuff here*/}
Tuttavia, questo genera un errore in fase di compilazione, dal momento che non è D C. Così la mia due domande sono:
a) C'è un modo pulito per fare questo? Nel peggiore dei casi, penso di poter sostituire D con C con un piccolo problema, ma forse c'è una ragione per cui non è un'idea sicura?
b) Devo anche dichiarare esplicitamente i miei generici nella definizione di classe figlio o esiste un modo più semplice che dovrei fare con tipi vincolati?
Non si vede lo scenario in cui lo si utilizza, ma 'A dove T1: T2 dove T2: C' e' B : A 'dovrebbe fare il trucco. –
MarcinJuraszek