クラスプロパティへのアクセスを同じ名前空間内にのみ制限する方法
-
06-07-2019 - |
質問
クラスプロパティへのアクセスを同じ名前空間内に制限するにはどうすればよいですか?次のクラスを検討してください。 Contentクラスはそれ自体を公開できず、代わりにContentServiceクラス 状態を公開に変更する前にいくつかのことを行います。
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;
}
}
記事の状態を変更できるのはContentServiceクラスのみになるようにするにはどうすればよいですか?
これに対処するのに役立つ設計パターンはありますか?
解決
「内部」を使用できます。同じアセンブリ内のクラスのみがContentクラスのStateメンバーを変更できるように修飾子にアクセスします(ただし、他のアセンブリの誰でも値を取得できます)。
public State Status { get; internal set; }
これで、ContentServiceは同じアセンブリにあるため状態を設定できるようになりましたが、外部の呼び出し元は状態を取得することしかできません(設定することは許可されていません)。
所属していません StackOverflow