在“泛型”类型参数之前,“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