Frage

Wie Zugriff auf eine Klasseneigenschaft beschränken im gleichen Namensraum? Betrachten Sie die folgende Klasse. Die Content-Klasse kann Veröffentlichen Sie selbst nicht, sondern die Klasse Content wird ein paar Dinge tun, bevor der Staat veröffentlicht ändern.

public class Content : Entity, IContent
    {
        public string Introduction { get; set; }

        public string Body { get; set; }

        public IList<Comment> Comments { get; set; }

        public IList<Image> Images { get; private set; }

        public State Status { get; } 
    }

public class ContentService
    {
        public IContent Publish(IContent article)
        {
            //Perform some biz rules before publishing   
            article.Status = State.Published;
            return article;
        }
    }

Wie kann ich es machen, so dass nur die Contentservice-Klasse, die den Zustand des Artikels ändern?

Gibt es deisng Muster mich damit umgehen helfen?

War es hilfreich?

Lösung

Sie können die „internen“ Zugriffsmodifizierer verwenden, so dass nur Klassen innerhalb derselben Versammlung Staats-Mitglied der Content-Klasse ändern können (aber jeder auch in anderen Baugruppen können den Wert GET).

public State Status { get; internal set; } 

So, jetzt Contentservice kann den Zustand gesetzt, weil es in der gleichen Versammlung, sondern externe Anrufer können nur den Zustand bekommen (sie sind nicht einstellen es erlaubt).

Andere Tipps

Java hat den Begriff „Paket sichtbar“ oder „Paket privat“. Dies ist in der Tat die Standardeinstellung für etwas, wo Sie keine Sichtbarkeit (private oder public) angeben. Aus irgendeinem Grund fast niemand jemals verwendet diese.

Deklarieren Content als Freund ?

Alternativ Java hat einen Zugriffsmodifikator dass beläuft sich auf "Paket-private".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top