In una domanda StackExchange diversa, ho notato qualcuno che utilizza questo prototipo:
void DoSomething<T>(T arg) where T: SomeSpecificReferenceType
{
//Code....
}
Tenendo presente che esiste un solo vincolo di tipo ( SomeSpecificReferenceType
), qual è la differenza e il vantaggio di scriverlo in quel modo, invece di semplicemente:
void DoSomething(SomeSpecificReferenceType arg)
{
//Code....
}
In entrambi i casi, arg
sarà soggetto al controllo del tipo in fase di compilazione. In entrambi i casi, il corpo del metodo può fare affidamento sulla conoscenza che arg
è di (o è un discendente di) un tipo specifico che è noto al momento della compilazione.
Si tratta di un caso di uno sviluppatore troppo zelante che sta imparando i farmaci generici prima di apprendere l'ereditarietà ordinaria? O esiste una ragione legittima per cui una firma di metodo dovrebbe essere scritta in questo modo?