我有一本书解释了逆变/协方差,如下所示:
- 委托可以具有比其方法目标更具体的参数类型。这称为逆变
- 委托的返回类型可以比其目标方法的返回类型更具体。这称为协方差
而且,这是一个例子。
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
and 得到了相同的结果o = RetrieveString
。(我用 Mono 测试过)。
- 那么,作者为什么用
new
协方差/逆变来解释呢? - 协方差/逆变思想背后的理论是什么?它只是一个花哨的名字描述
object x = Everything inherit from object
吗?这个奇怪的名字是从哪里来的?它的用途是什么?