別のクラスのパブリック クラス メンバーとして、ビルダー パターンから多くの注目を集めています。
public class Part
{
public class Builder
{
public string Name { get; set; }
public int Type { get; set; }
public Part Build()
{
return new Part(Name, Type);
}
}
protected Part(string name, int type)
{
...
}
}
保護されたコンストラクターに注意してください-ビルダーを使用してパーツを取得する必要がある方法が好きです。への呼び出し
Part p = new Part.Builder() { Name = "one", Type = 1 }.Build();
うまくいきます。私がやりたいことは、このビルダーを使用して、タイプに基づいて特別な種類のパーツを提供することです (たとえば)。
public class SpecialPart : Part
{
protected SpecialPart(string name, int type) : base(name, type) { }
}
そして、ビルダーへのわずかな変更:
public Part Build()
{
if (Type == _some_number_)
return new SpecialPart(Name, Type);
return new Part(Name, Type);
}
しかし、これは機能しません。Part.Builder は、SpecialPart の保護されたコンストラクターを認識できません。Builder を Part の子孫と連携させ、ビルダーに必須の同じセマンティクスを取得するにはどうすればよいですか?