문제

나는 다른 클래스의 공개 클래스 멤버로서 빌더 패턴에서 많은 견인력을 얻었습니다.

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);
}

그러나 이것은 작동하지 않습니다. 부품 .Builder는 SpecialPart의 보호 생성자를 볼 수 없습니다. Builder가 부품의 후손들과 협력하고 동일해야 할 일자 의미를 얻을 수있는 방법은 무엇입니까?

도움이 되었습니까?

해결책

고양이를 피부하는 방법에는 여러 가지가 있지만 여기서 저항이 가장 적은 경로는 다양한 부품 유형의 생성자를 공개 또는 내부로 만들 것입니다.

다른 팁

자체 어셈블리에 넣고 내부 액세스 지정자를 사용하는 것을 제외하고는 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top