逆变和方法签名



查看此代码

delegate void StringAction (string s);
class Test
{
static void Main()
{
    StringAction sa = new StringAction (ActOnObject);
    sa ("hello");
}
static void ActOnObject (object o)
{
   Console.WriteLine (o); // hello
 }
}

这段代码是否由于逆变而起作用?( MoreDeriverdRef <== LessDerivedRef )

或者因为

与逆变无关) - 在 c# 中,我可以执行类似 ActOnObject (object o) 的方法,ActOnObject ("lalala")

这段代码之所以有效,是因为,正如 Eric Lippert 在本文中所说:

委托转换的方法组在其 参数类型。

以上仅适用于引用类型,但 stringobject 都是引用类型,因此满足要求。

这种差异从 C# 2.0 开始就得到了支持,你不需要版本 4 中引入的额外支持来依赖它。

是的,这是由于逆变。

这意味着您不仅可以将具有以下方法分配给委托 匹配签名,以及返回更多派生类型的方法 (协方差)或接受派生类型较少的参数 (逆变)比委托类型指定的值。

取自 http://msdn.microsoft.com/en-us/library/dd233060(VS.100).aspx

相关内容

  • 没有找到相关文章

最新更新