4 Stimmen

Eine Art von Erstellungsmuster in C# benötigt

Ich habe den folgenden Typ:

// incomplete class definition
public class Person
{
    private string name;

    public string Name
    {
        get { return this.name; }
    }
}

Ich möchte, dass dieser Typ erstellt y aktualisiert mit einer Art dediziertem Controller/Builder, aber ich möchte, dass es schreibgeschützt für andere Typen .

Dieses Objekt muss auch jedes Mal ein Ereignis auslösen, wenn es von seinem Controller/Builder aktualisiert wird.

Zusammenfassend lässt sich sagen, dass nach der vorherigen Typdefinition Skelett :

  • El Person konnte nur von einem bestimmten Controller instanziiert werden
  • Dieser Controller könnte Update den Zustand der Person ( name Feld) zu jeder Zeit
  • El Person Sie müssen eine Meldung für den Rest der Welt, wenn sie auftritt
  • Alle anderen Typen sollten nur in der Lage sein lesen Person Eigenschaften

Wie soll ich das umsetzen? Ich spreche über einen Controller/Builder hier, aber alle anderen Lösungen sind willkommen.

Anmerkung: Ich würde mich auf die internal Modifikator, aber idealerweise sollten alle meine Sachen in derselben Baugruppe sein.

0voto

David Thibault Punkte 8318

Vielleicht etwas in dieser Art?

public class Person
{
    public class Editor
    {
        private readonly Person person;

        public Editor(Person p)
        {
            person = p;
        }

        public void SetName(string name)
        {
            person.name = name;
        }

        public static Person Create(string name)
        {
            return new Person(name);
        }
    }

    protected string name;

    public string Name
    {
        get { return this.name; }
    }

    protected Person(string name)
    {
        this.name = name;
    }
}

Person p = Person.Editor.Create("John");
Person.Editor e = new Person.Editor(p);
e.SetName("Jane");

Nicht schön, aber ich denke, es funktioniert. Alternativ können Sie Eigenschaften anstelle von SetX Methoden auf dem Editor verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X