委任戻りタイプのコヒーレンス
2383 ワード
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委託返却タイプの協変性