我从构建器模式中获得了很多牵引力,作为另一个类的公共类成员:
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。致电
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的后代一起工作并获得相同的必须具有的构建器语义?
答案 0 :(得分:2)
有许多方法可以给猫皮肤,但是这里阻力最小的路径是将各种零件类型的构造者公开或内部化。
答案 1 :(得分:2)
除了将它们放在自己的程序集中并使用内部访问说明符之外,你不能这样做。