|
|
1
3
从概念上讲,Derived.CandidateAction的签名是“我可以处理你想扔给我的任何对象。”SampleDelegate的合同是“你必须能够处理字符串”。现在,如果一个方法可以处理任何对象,它肯定可以处理字符串。因此,Derived.CandidateAction能够满足SampleDelegate的需要,因此可以分配给SampleDelegate变量。 http://hestia.typepad.com/flatlander/2008/12/c-covariance-and-contravariance-by-example.html . |
|
|
2
1
相反允许您使用具有参数的方法,这些参数是委托方法签名中参数的基本类型。 委托签名定义将传递给方法的类型。方法本身可以具有不太“特定”的类型。在您的示例中,当传递字符串时调用委托。实际方法只需要一个对象是完全可以的,因为允许object类型的变量保存string类型的实例。 这在事件处理场景中非常有用,您可以编写这样的事件处理程序,它可以附加到几乎任何事件(即使传递的args参数更具体,如ItemCheckedEventArgs):
|