公共委托中的'in'意味着什么?比较<在T>中

Ric*_*lls 1 .net generics comparison delegates

msdn docs(http://msdn.microsoft.com/en-us/library/tfakywbh.aspx)报告了比较delgate的语法,其内容类似于关键字"in".

public delegate int Comparison<in T>(
    T x,
    T y
)
Run Code Online (Sandbox Code Playgroud)

'in'是否有任何实际意义?是否还有其他可能出现的关键字?

Ken*_*rey 5

in表示通用参数是逆变的.在这种情况下,这意味着您可以将a分配Comparison<Base>给a Comparison<Derived>.

您可以这样做,因为Comparison<Derived>变量可以接受采用Base类型参数的方法.当您调用a时Comparison<Derived>,您需要将Derived变量(恰好是有效参数)传递给接受Base参数的方法.这意味着将a分配给a是有意义Comparison<Base>的Comparison<Derived>.

相反的in是(自然地)out.这意味着参数是协变的,并且可以将Derived泛型分配给Base泛型.例如,这将用于指定委托的返回类型.

一种方便的记忆方法是:

in应仅用于仅传入的类型.out应仅用于仅传递的类型.

在这里阅读更多:

in(Generic Modifier)(C#Reference)

协方差和逆变(C#和Visual Basic)