首页 > 其他 > 详细

委托返回类型的协变性

时间:2014-08-18 09:10:03      阅读:478      评论:0      收藏:0      [点我收藏+]
    class Program
    {
        static void Main(string[] args)
        {
            StreamFactory factory = GenerateSampleData;//(3)
            using (Stream stream = factory())//(4)
            {
                int data;
                while ((data=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 委托返回类型的协变性

委托返回类型的协变性,布布扣,bubuko.com

委托返回类型的协变性

原文:http://www.cnblogs.com/uncleJOKER/p/3918714.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!