公共阶层成员对后代可见

时间:2009-06-02 19:03:46

标签: c# design-patterns builder-pattern

我从构建器模式中获得了很多牵引力,作为另一个类的公共类成员:

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的后代一起工作并获得相同的必须具有的构建器语义?

2 个答案:

答案 0 :(得分:2)

有许多方法可以给猫皮肤,但是这里阻力最小的路径是将各种零件类型的构造者公开或内部化。

答案 1 :(得分:2)

除了将它们放在自己的程序集中并使用内部访问说明符之外,你不能这样做。