Se ho un metodo generico come questo:Perché specificare un argomento generico come interfaccia non è un errore con un vincolo di classe?
static void Foo<T>() where T : class
{
}
potrei chiamarla specificando un tipo di interfaccia, ad esempio ICollection<int>
Foo<ICollection<int>>();
Ora assumere ho una struct che implementa ICollection<int>
:
struct Bar : ICollection<int>
Non posso specificarlo esplicitamente come argomento tipo, ma se ho una variabile di tipo ICollection<int>
che ha il tipo sottostante Bar
, e cambiare il mio metodo generico per prendere un argomento di tipo T
, non posso fare:
static void Foo<T>(T arg) where T : class
{
}
ICollection<int> bar = new Bar();
Foo <ICollection<int>>(bar);
Come si può vedere che ignora completamente il vincolo generico. Quindi la mia domanda è perché specificare un'interfaccia come argomento di tipo è consentita quando abbiamo un vincolo class
?
hmm Immagino di non aver considerato il fattore di boxe. ciò ha senso. –