我剛剛看到一個不熟悉的語法,同時尋找GroupBy
返回類型:在一個泛型接口在「泛型」類型參數之前,「out」是什麼意思?
public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>
我知道這是什麼意思out
的方法,但不是。
out
在泛型中的含義是什麼?
我剛剛看到一個不熟悉的語法,同時尋找GroupBy
返回類型:在一個泛型接口在「泛型」類型參數之前,「out」是什麼意思?
public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>
我知道這是什麼意思out
的方法,但不是。
out
在泛型中的含義是什麼?
它是C#4.0(Visual Studio 2010)中引入的兩個通用修飾符之一。
它表示它聲明的泛型參數是協變的。
in
修飾符表示其聲明的通用參數是逆變。
請參閱MSDN上的out (Generic Modifier)和in (Generic Modifier)。
out
關鍵字在此上下文中將簡單地說明相應的類型參數是協變的 - 協方差使您可以使用比泛型參數指定的類型更多的派生類型。
順便說一句,請參閱從埃裏克利珀這10個部分的系列更多地瞭解協方差和反方差:http://blogs.msdn.com/b/ericlippert/archive/2007/10/16/covariance-and-contravariance-in-c-part-one.aspx
出只是意味着該類型僅用於輸出例如
public interface Foo<out T>
{
T Bar()
}
這裏還有一個修飾詞,表示該類型僅用於輸入,例如,
public interface Foo<in T>
{
int Bar(T x)
}
這些使用,因爲在接口T中是協變,並與出接口是逆變在T.
它表示covariant參數。另見關於MSDN的描述。本質上,它說,該IGrouping<Aderived, Bderived>
可視爲IGrouping<Abase, Bbase>
,因此你可以
IGrouping<Aderived, Bderived> gr = MakeGrouping(...);
IGrouping<Abase, Bbase> grBase = gr;
如果Aderived
是一個接口或Abase
派生的類型。當您想調用需要參數類型爲IGrouping<Abase, Bbase>
的方法時,此功能非常實用,但您只能獲得IGrouping<Aderived, Bderived>
類型的對象。在這種情況下,由於類型參數的協方差,兩種類型都可以被認爲是等價的。
這是一個*通用修飾符*。請參閱MSDN http://msdn.microsoft.com/en-us/library/dd469487.aspx – 2012-04-05 11:24:20
與12k代表至少看[MSDN](http://msdn.microsoft.com/en-us/library/ dd469487.aspx)之前問? – Reniuz 2012-04-05 11:24:54
@Reniuz。我發現那裏只有'out'參考。對不起...... – gdoron 2012-04-05 11:25:52