【发布时间】:2011-07-23 01:57:24
【问题描述】:
我有一个book,它解释了逆变/协方差如下:
- 委托可以具有比其方法目标更具体的参数类型。这称为逆变
- 委托的返回类型可能不如其目标方法的返回类型具体。这称为协方差
而且,这是一个例子。
using System;
delegate void StringAction(string s);
delegate object ObjectRetriever();
class Test
{
static void Main()
{
StringAction sa = new StringAction(ActionObject);
sa("hello");
ObjectRetriever o = new ObjectRetriever(RetrieveString);
object result = o();
Console.WriteLine(result);
}
static string RetrieveString() {return "hello";}
static void ActionObject(object o)
{
Console.WriteLine(o);
}
}
我认为为了使用协方差/逆变,需要使用new,如示例中所示,但我似乎使用sa = ActionObject 和o = RetrieveString 得到相同的结果。 (我用 Mono 测试过)。
- 那为什么作者用
new来解释协变/逆变呢? - 协方差/逆变思想背后的理论是什么?它只是描述
object x = Everything inherit from object的花哨名称吗?这个奇怪的名字是从哪里来的?它有什么用?
【问题讨论】:
-
我觉得这篇文章很有用 - stackoverflow.com/questions/2184551/…
标签: c# covariance contravariance