5
考慮這個類:如果類的接口是逆變的,使用泛型引用類型參數是否有任何好處?
class MyClass<T> where T: class // or T: BaseClass
{
void DoSomething1(T arg){ ... }
void DoSomething2(T arg){ ... }
...
void DoSomethingN(T arg){ ... }
}
而且沒有T
值的回報!即使在受保護的財產或領域,後代也不能返回T
。
這裏比使用硬編碼的基類類型有什麼優勢嗎?
我在這裏沒有看到問題/問題。你爲什麼想讓函數返回'T'? 'T'被用作參數。在你的例子中,約束指的是'T'的'參考'能力。如果你選擇了'T:BaseClass',那麼可能沒有使用通用參數的用例。 – ckruczek
我會說不,因爲我沒有看到使用具體類型的任何可能性 - 如果它不能被使用,定義它沒有價值。 – JanDotNet
@JNS可能會有一些優化空間。在T是密封類的情況下,編譯器可以發出呼叫而不需要查看VMT? –