2010-08-27 54 views
3

我常常忘了,如果我有定義covarient和contravarient泛型類型時使用inout。在Java中,我有助記符PECS(生產者擴展消費者超級)來幫助我。你知道類似於c#的助記符嗎?助記符爲C#泛型類型

+4

RELB - 閱讀Eric Lippert的博客http://blogs.msdn.com/b/ericlippert/archive/tags/covariance+and+contravariance/ – JaredPar 2010-08-27 16:15:57

+0

我很少定義遺傳學,除非試圖創建12英尺的蜥蜴人,每個人都喜歡蜥蜴。 – 2010-08-27 16:21:47

+0

@Jimmy Hoffa - 耶,但超過10英尺的東西只是矯枉過正。 – 2010-08-27 16:31:10

回答

3

沒有他們這樣做對我們來說,當他們「在」叫他們和「出」,而不是協變和逆變?試想一下:我是否在推動價值觀念,或讓他們走出去?如果不確定,請嘗試'出' - 這是更常見(也更容易理解)。

+0

雖然這是事實,但並不是很吸引人。 – 2010-09-01 14:10:45

0

當我不記得了,我總是指IEnumerable<out T>(這意味着我當然要記住,接口的簽名......)。你只能得到一個IEnumerable<out T>的T「out」實例,所以它是協變的。如果只能將T「in」的實例傳遞給一個接口(或更常見的委託),則它是逆向的。

1

in類型被傳遞到in功能; out類型從函數返回out

+0

這不是mR_fr0g所要求的。當用作泛型類變量類型修飾符(這是C#4.0的一個新功能)時,他希望使用助記符進行出入,而不是方法參數的常用舊用法。 – rsenna 2010-08-27 19:10:53

+0

rsenna:這正是rsenna所要求的。當創建一個通用接口時,只傳入函數的類型可以獲得'in'標籤,而僅從函數返回的類型可以獲得'out'標籤。傳入並返回的類型(或用作'ref'或'out'參數)是不變的,並且不能獲得任何標籤。 – Gabe 2010-08-27 19:36:00