我有一本书(链接),其中解释了协变性/逆变性如下:
我认为为了使用协变性/逆变性,需要像示例中所示使用
- 委托可以具有比其方法目标更具体的参数类型。这被称为逆变性。
- 委托的返回类型可以比其目标方法的返回类型不那么具体。这被称为协变性。
以下是一个示例。
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
的花哨名称吗?这个奇怪的名字从哪里来?它的用途是什么?