Considerate questa classe:C'è qualche vantaggio nell'utilizzo del parametro del tipo di riferimento generico, se l'interfaccia della classe è controvariante?
class MyClass<T> where T: class // or T: BaseClass
{
void DoSomething1(T arg){ ... }
void DoSomething2(T arg){ ... }
...
void DoSomethingN(T arg){ ... }
}
e non c'è nessun ritorno di T
valori! Anche in proprietà o campo protetti, quindi i discendenti non possono restituire T
pure.
C'è qualche vantaggio nell'utilizzare un parametro generico qui rispetto al tipo di classe base solo hardcoded?
Non vedo il problema/domanda qui. Perché vuoi avere le funzioni per restituire 'T'? 'T' è usato come parametro. Nel tuo esempio il vincolo si riferisce all'abilità 'referenziale' di 'T'. Se aveste scelto 'T: BaseClass', potrebbe non esserci alcun caso di utilizzare un parametro generico. – ckruczek
Direi di no, perché non vedo alcuna possibilità di usare il tipo concreto - se non può essere usato, non c'è alcun valore nel definirlo. – JanDotNet
@JNS Potrebbe esserci spazio per l'ottimizzazione. Nel caso in cui T sia una classe sigillata, il compilatore può emettere una chiamata senza necessità di guardare in VMT? –