Rozważmy klasę:Czy jest jakaś korzyść z używania ogólnego parametru typu odniesienia, jeśli interfejs klasy jest sprzeczny?
class MyClass<T> where T: class // or T: BaseClass
{
void DoSomething1(T arg){ ... }
void DoSomething2(T arg){ ... }
...
void DoSomethingN(T arg){ ... }
}
I nie ma powrotu T
wartości! Nawet w chronionej nieruchomości lub na polu, więc potomkowie nie mogą zwrócić również T
.
Czy jest jakaś korzyść z używania parametru ogólnego w porównaniu do zwykłego typu klasy podstawowej?
Nie widzę problemu/pytania tutaj. Dlaczego chcesz mieć funkcje zwracające 'T'? 'T' jest używany jako parametr. W twoim przykładzie ograniczenie odnosi się do "referencyjnej" zdolności 'T'. Jeśli wybrałbyś 'T: BaseClass', to może nie istnieć przypadek użycia ogólnego parametru. – ckruczek
Powiedziałbym, że nie, ponieważ nie widzę możliwości użycia konkretnego typu - jeśli nie można go użyć, nie ma żadnej wartości przy jego definiowaniu. – JanDotNet
@JNS Może być trochę miejsca na optymalizację. W przypadku, gdy T jest klasą zamkniętą, czy kompilator może emitować wywołanie bez potrzeby zaglądania do VMT? –