Delegateのcovariantサポート

C++/CLIの話でふれたcovariant(共変)について。
http://d.hatena.ne.jp/akiramei/20050709/p1

C++/CLIだと共変の戻り型(仮想関数の戻り値型を派生クラスで置き換える)をサポートしてくれないんですね。C#も出来ないのでやっぱりって感じですけど。

.NET2.0でもサポートされていないのですが、delegateに関しては例外的にサポートされたみたいです。

using System;

class Foo { }

class Bar : Foo { }

delegate Foo FooDelegate();

class Program
{
    static Foo GetFoo()
    {
        return new Foo();
    }

    static Bar GetBar()
    {
        return new Bar();
    }

    static void Main(string[] args)
    {
        FooDelegate fd;

        fd = new FooDelegate(GetFoo);
        fd = new FooDelegate(GetBar);
    }
}

/* .NET1.1
xxx.cs(26,30): error CS0123: メソッド 'Program.GetBar()' はデリゲート型 
'Foo FooDelegate()' と一致しません。
 */

/* .NET2.0
Compiled.
 */

.NET1.1で無効だったコードが通るようになっていますね。