Pergunta

eu fui ficando um monte de tração de um padrão do construtor como um membro da classe pública de outra classe:

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)
    {
        ...
    }
}

Nota construtor protegido - Eu gosto de como eu tenho que usar o construtor para obter uma Part. Chamadas para

Part p = new Part.Builder() { Name = "one", Type = 1 }.Build();

grande trabalho. O que eu gostaria de fazer é usar este construtor para servir um tipo especial de parte com base no tipo (por exemplo):

public class SpecialPart : Part
{
    protected SpecialPart(string name, int type) : base(name, type) { }
}

E uma ligeira mudança para o construtor:

public Part Build()
{
    if (Type == _some_number_)
        return new SpecialPart(Name, Type);
    return new Part(Name, Type);
}

Mas isso não funciona - Part.Builder não pode ver construtor protegido de SpecialPart. semântica Como posso obter Builder para trabalhar com descendentes de parte e obter a mesma must-have-a-construtor?

Foi útil?

Solução

Há muitas maneiras de esfolar um gato, mas o caminho de menor resistência aqui vai ser tornando os construtores de seus vários tipos de peças público ou interno.

Outras dicas

Você não pode fazê-lo, exceto para colocá-los em sua própria montagem e usar o especificador de acesso interno.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top