悪い見出しで申し訳ありませんが、私の英語はそれほど上手ではありません。
次のコードを想定します(テストにはプログラムモードでLINQPadを使用します)。
public class BaseClass
{
protected Settings settings;
public BaseClass()
{
this.settings = new Settings();
}
public virtual void PrintSettings()
{
var t = settings.GetType();
Console.WriteLine(string.Join(", ", t.GetProperties().Select(pi => pi.Name)));
}
public class Settings
{
public string BaseClassSetting { get { return "BaseClassSetting."; } }
}
}
「newBaseClass()。PrintSettings();」の呼び出し 明らかにコンソールに「BaseClassSetting」を出力します。
BaseClassからクラスを派生させましょう:
public class InheritedClass : BaseClass
{
public new class Settings : BaseClass.Settings
{
public string InheritedClassSetting { get { return "InheritedClassSetting!"; } }
}
}
「newAttachedClass()。PrintSettings();」の呼び出し コンソールに「BaseClassSetting」が引き続き出力されます。
コードに「新しい」継承されたClass.Settingsを使用させる唯一の方法は、次のようなctorを追加することです。
public InheritedClass()
{
this.settings = new Settings();
}
この追加のctorを使用して、目的の「AliExpressClassSetting、BaseClassSetting」をコンソールに出力します。
ここで質問:BaseClass-ctorが常にインスタンスのオブジェクトのSettings-Classを使用するようにすることは可能ですか?(派生クラスにctorを追加せずに)