Я получаю много тяги от шаблона строителя как общественный класса член другого класса:член общественного класса видеть потомок
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 работать с потомками Части и получить семантику must-have-a-builder?
Есть ли причина, по которой Builder - это класс, а не только защищенный метод? – Robert
@Robert: protected = public? –
да, общественность, конечно. Я думал о конструкторе. – Robert