2016-05-17 18 views
5

考慮這個類:如果類的接口是逆變的,使用泛型引用類型參數是否有任何好處?

class MyClass<T> where T: class // or T: BaseClass 
{ 
    void DoSomething1(T arg){ ... } 
    void DoSomething2(T arg){ ... } 
    ... 
    void DoSomethingN(T arg){ ... } 
} 

而且沒有T值的回報!即使在受保護的財產或領域,後代也不能返回T

這裏比使用硬編碼的基類類型有什麼優勢嗎?

+1

我在這裏沒有看到問題/問題。你爲什麼想讓函數返回'T'? 'T'被用作參數。在你的例子中,約束指的是'T'的'參考'能力。如果你選擇了'T:BaseClass',那麼可能沒有使用通用參數的用例。 – ckruczek

+0

我會說不,因爲我沒有看到使用具體類型的任何可能性 - 如果它不能被使用,定義它沒有價值。 – JanDotNet

+0

@JNS可能會有一些優化空間。在T是密封類的情況下,編譯器可以發出呼叫而不需要查看VMT? –

回答

0

不,沒有優勢。由於您只傳遞T類型的參數,因此您的方法基本上是contravariant,因此您最好聲明它們採用BaseClass參考,而不是T

相關問題