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で無効だったコードが通るようになっていますね。