.Net 2.0 新功能:委托中的协变与逆变(Covariance and Contravariance in Delegates)

委托中的协变与逆变Covariance and Contravariance in Delegates

委托中的协变

<!--[if !supportLists]-->1. 当委托方法的返回类型具有的派生程序比委托签名更大时,就称为协变委托方法。因为方法的返回类型比委托签名的返回类型更具体,所以可对其进行隐式转换,这样该方法就可用作委托。

<!--[endif]-->

<!--[if !supportLists]-->2. 协变使得创建可被类和派生类同时使用的委托方法成为可能。<!--[endif]-->

class Animals ... {}

class Dogs:Animals ... {}

class Program

... {

publicdelegateAnimalsHandlerMethod();

publicstaticAnimalsFirstHandler()...{returnnull;}

publicstaticDogsSecondHandler()...{returnnull;}

staticvoidMain()

...{

HandlerMethodhandler1
=FirstHandler;

HandlerMethodhandler2
=SecondHandler;

}


}


委托中的逆变

<!--[if !supportLists]-->3. 当委托方法签名具有一个或多个参数,并且这些参数的类型派生自方法参数的类型时,就称为逆变委托方法。因为委托方法签名参数比方法参数更具体,因此可在传递给处理程序方法时对他们隐式转换。

<!--[endif]-->

<!--[if !supportLists]-->4. 这样逆变使得大量类使用的更通用的委托方法的创建变得更简单。<!--[endif]-->

class Animals ... {}

class Dogs:Animals ... {}

class Program

... {

publicdelegatevoidHandlerMethod(Dogsdog);

publicstaticvoidFirstHandler(Animalselephant)...{returnnull;}

publicstaticvoidSecondHandler(Dogsadog)...{returnnull;}

staticvoidMain(string[]arg)

...{

HandlerMethodhandler1
=FirstHandler;

HandlerMethodhandler2
=SecondHandler;

}


}


你可能感兴趣的:(.net)