Wie Zugriff auf eine Klasse Eigenschaft nur im gleichen Namensraum beschränken
-
06-07-2019 - |
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?
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".