msdn文档(http://msdn.microsoft.com/en-us/library/tfakywbh.aspx)使用看起来像关键字'in‘的内容报告比较数据门的语法。
public delegate int Comparison<in T>(
T x,
T y
)“in”有什么实际意义吗?还有其他可能出现在那里的关键字吗?
发布于 2012-05-18 03:50:14
in表示泛型参数是逆变量。这意味着,在本例中,您可以将Comparison<Base>分配给Comparison<Derived>。
您可以这样做,因为Comparison<Derived>变量可以接受接受Base类型参数的方法。在调用Comparison<Derived>时,需要传递Derived变量,这些变量恰好是接受Base参数的方法的有效参数。这意味着将Comparison<Base>分配给Comparison<Derived>是有意义的。
in的对立面(自然地)是out。这意味着该参数是协变的,并且可以将Derived泛型分配给Base泛型。例如,这将用于指定委托的返回类型。
一个方便的记住哪个是哪个的方法:
in应仅用于仅传入的类型。out应仅用于仅传出的类型。
点击此处阅读更多信息:
in (Generic Modifier) (C# Reference)
Covariance and Contravariance (C# and Visual Basic)
发布于 2012-05-18 03:51:12
如果您熟悉docs,为什么不使用它们呢?
它将参数指定为contravariant。
发布于 2012-05-18 06:05:15
此委托是逆变量,in关键字表示T仅用作输入类型。反差意味着定义了这个委托类型:
public delegate int Comparison<in T>(T x, T y); 您将能够执行以下操作:
Comparison<Control> comp1 = (a, b) => (a.Width*a.Height - b.Width*b.Height);
Comparison<TextBox> comp2 = comp1;如果没有in关键字,它会抱怨第二行,说它不能将一种类型转换成另一种类型。但是,因为我们知道T只用于输入,所以将处理Control的委托分配给期望提供(输入) TextBox的委托指针应该是合法的。毕竟,TextBox会适合Control。
另一方面,存在协方差。它还依赖于适合其他类型的类型,但这一次是针对结果(在本例中是委托的结果)。
协方差和逆方差统称为方差,不仅适用于泛型委托,还适用于泛型类和接口。Variance也适用于非泛型委托和数组,但以一种隐式的方式,因此不需要特殊的关键字-它只是工作。
方差不是一个简单的主题,我不能将我的解释与Eric Lippert的series of blog articles相提并论。尽管它是2007年的,他在那里用将来时谈论了.NET4 C#,但它仍然是一本非常好的书。
https://stackoverflow.com/questions/10642518
复制相似问题