共変性

説明が難しいのだが、基底クラスを返す関数を入れるデリゲートがあった時、このデリゲートに派生クラスを返す関数を入れることもできる。
このような性質を共変性と言うらしい・・・。
詳しくは、

共変性と反変性 (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