您的位置:首页 > 其它

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

2007-09-03 15:58 591 查看
委托中的协变与逆变(Covariance and Contravariance in Delegates)
委托中的协变
1. 当委托方法的返回类型具有的派生程序比委托签名更大时,就称为协变委托方法。因为方法的返回类型比委托签名的返回类型更具体,所以可对其进行隐式转换,这样该方法就可用作委托。
2. 协变使得创建可被类和派生类同时使用的委托方法成为可能。




class Animals ...{ }






class Dogs : Animals ...{ }




class Program






...{




public delegate Animals HandlerMethod();






public static Animals FirstHandler() ...{ return null; }






public static Dogs SecondHandler() ...{ return null; }




static void Main()






...{




HandlerMethod handler1 = FirstHandler;




HandlerMethod handler2 = SecondHandler;




}




}



委托中的逆变
3. 当委托方法签名具有一个或多个参数,并且这些参数的类型派生自方法参数的类型时,就称为逆变委托方法。因为委托方法签名参数比方法参数更具体,因此可在传递给处理程序方法时对他们隐式转换。
4. 这样逆变使得大量类使用的更通用的委托方法的创建变得更简单。




class Animals ...{ }






class Dogs : Animals ...{ }




class Program






...{




public delegate void HandlerMethod(Dogs dog);






public static void FirstHandler(Animals elephant) ...{ return null; }






public static void SecondHandler(Dogs adog) ...{ return null; }




static void Main(string[] arg)






...{




HandlerMethod handler1 = FirstHandler;




HandlerMethod handler2 = SecondHandler;




}




}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: