首页 > 代码库 > 委托返回类型的协变性
委托返回类型的协变性
class Program { static void Main(string[] args) { StreamFactory factory = GenerateSampleData;//(3) using (Stream stream = factory())//(4) { int data; while ((data=http://www.mamicode.com/stream.ReadByte())!=-1) { Console.WriteLine(data); } } Console.Read(); } private delegate Stream StreamFactory();//(1) static MemoryStream GenerateSampleData()//(2) { byte[] buffer = new byte[16]; for (int i = 0; i < buffer.Length; i++) { buffer[i] = (byte)i; } return new MemoryStream(buffer); } }
我们声明委托类型的返回类型是Stream(1),但GenerateSampleData方法(2)的返回类型是MemoryStream。负责创建委托实例的那一行(3)执行前面见过的转变换,并利用返回类型的协变性来允许GenerateSampleData座位StreamFactory的操作使用。到调用委托实例的时候(4),编译器已经不知道返回的是一个MemoryStream——如果将stream变量的类型变成MemoryStream,会报告一个编译错误。
摘抄自《深入理解C#》第五章,5.3.2 委托返回类型的协变性
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。