程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 委托返回類型的協變性

委托返回類型的協變性

編輯:C#基礎知識
    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 委托返回類型的協變性

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved