C#委托的协变性和逆变性

逆变性

只要函数参数与委托兼容,就能创建委托实例。

 1 Button button = new Button();
 2 //public delegate void EventHandler(object sender, EventArgs e);
 3 button.Click += LogPlainEvent;
 4 //public delegate void KeyPressEventHandler(object sender, KeyPressEventArgs e);
 5 button.KeyPress += LogPlainEvent;
 6 //public delegate void MouseEventHandler(object sender, MouseEventArgs e);
 7 button.MouseClick += LogPlainEvent;
 8 
 9 public void LogPlainEvent(object sender, EventArgs e)
10 {
11 }

协变性

只要返回值类型与委托兼容,就能创建委托实例

 1 public delegate Stream StreamFactory();
 2 
 3 public MemoryStream GenerateData()
 4 {
 5     return new MemoryStream();
 6 }
 7 
 8 StreamFactory factory = GenerateData;
 9 using (Stream stream = factory())
10 {
11     int data;
12     while((data = stream.ReadByte()) != -1)
13     {
14         Console.WriteLine(data);
15     }
16 }  

 

转载于:https://www.cnblogs.com/love-me-love-my-code/p/10556095.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值