W innym pytaniu StackExchange zauważyłem, że ktoś używa tego prototypu:
void DoSomething<T>(T arg) where T: SomeSpecificReferenceType
{
//Code....
}
Mając na uwadze, że istnieje tylko ograniczenie jednego typu ( SomeSpecificReferenceType), jaka jest różnica i korzyść z pisania go w ten sposób, zamiast po prostu:
void DoSomething(SomeSpecificReferenceType arg)
{
//Code....
}
W obu przypadkach argbędzie podlegać kontroli typu kompilacji. W obu przypadkach treść metody może bezpiecznie polegać na wiedzy, która argjest (lub jest potomkiem) określonego typu, który jest znany w czasie kompilacji.
Czy jest to przypadek nadgorliwego programisty, który poznaje generyczne, zanim dowie się o zwykłym dziedzictwie? Czy istnieje uzasadniony powód, dla którego podpis metody zostałby napisany w ten sposób?