Как ограничить доступ к свойству класса только в пределах одного и того же пространства имен - PullRequest
0 голосов
/ 23 октября 2009

Как ограничить доступ к свойству класса в одном и том же пространстве имен? Рассмотрим следующий класс. Класс 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 мог изменить состояние статьи?

Существуют ли какие-либо схемы, которые помогут мне справиться с этим?

Ответы [ 3 ]

0 голосов
/ 23 октября 2009

Объявить ContentService как друга ?

В качестве альтернативы, в Java есть модификатор доступа , который равен "package-private".

0 голосов
/ 23 октября 2009

Можно использовать «внутренний» модификатор доступа, чтобы только классы в одной сборке могли изменять элемент «Состояние» класса «Содержимое» (но каждый, даже в других сборках, может получить значение).

public State Status { get; internal set; } 

Так что теперь ContentService может устанавливать состояние, потому что он находится в той же сборке, но внешние абоненты могут получить только состояние (ему не разрешено устанавливать его).

0 голосов
/ 23 октября 2009

В Java есть понятие «видимый пакет» или «частный пакет». Фактически это значение по умолчанию для всего, что не указывает видимость (private или public). По некоторым причинам, почти никто никогда не использует это.

...