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 arg
będzie podlegać kontroli typu kompilacji. W obu przypadkach treść metody może bezpiecznie polegać na wiedzy, która arg
jest (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?