Question

Je reçois beaucoup de traction à partir d'un modèle de constructeur en tant que membre de la classe publique d'une autre 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)
    {
        ...
    }
}

constructeur protégé Note - J'aime comment je dois utiliser le générateur pour obtenir une partie. Les appels à

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

grand travail. Ce que je voudrais faire est d'utiliser ce constructeur pour servir un type particulier d'une partie en fonction du type (par exemple):

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

Et un léger changement au constructeur:

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

Mais cela ne fonctionne pas - Part.Builder ne peut pas voir le constructeur protégé de SpecialPart. Comment puis-je obtenir Builder pour travailler avec les descendants de la partie et obtenir le même must-have-a-builder sémantique?

Était-ce utile?

La solution

Il y a plusieurs façons de peau d'un chat, mais le chemin de moindre résistance ici va être faire les constructeurs de vos différents

types de partie publique ou interne.

Autres conseils

Vous ne pouvez pas le faire, sauf pour les mettre dans leur propre assemblée et utiliser le spécificateur d'accès interne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top