説明が難しいのだが、基底クラスを返す関数を入れるデリゲートがあった時、このデリゲートに派生クラスを返す関数を入れることもできる。
このような性質を共変性と言うらしい・・・。
詳しくは、
共変性と反変性 (C#) | Microsoft Docs
デリゲート - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
BaseClass.csで、
Nameプロパティだけ。
DerivedClass.csで、
Addressプロパティも。
MainClass.csで、
CreateBaseで"Taro"だけセットしておいて、BaseClassオブジェクトを返す。
CreateDerivedのほうは"Jiro"と"Osaka"をセットして、DerivedClassオブジェクトを返す。
DelegateCreateBaseのdcbは、BaseClassを返すCreateBaseも、DerivedClassを返すCreateDerivedも入れられる。
ただし、デリゲートの戻り値はBaseClassなので、BaseClassとして返される。
Add CreateBase to dcb! Return BaseClass Object! bc.Name = Taro Add CreateDerived to dcb! Return DerivedClass Object! bc.Name = Jiro 続行するには何かキーを押してください . . .
どちらもBaseClassとして返されるので、Nameしか出力できない。
Sample/cs/Covariance/Covariance/src/Covariance at master · bg1bgst333/Sample · GitHub