Как ограничить доступ к свойству класса только в пределах одного и того же пространства имен

StackOverflow https://stackoverflow.com/questions/1613965

  •  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 мог изменить состояние статьи?

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

Это было полезно?

Решение

Вы можете использовать " внутреннюю " модификатор доступа, так что только классы в одной сборке могут изменять член State класса Content (но каждый, даже в других сборках, может получить значение).

public State Status { get; internal set; } 

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

Другие советы

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

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

Кроме того, в Java есть модификатор доступа это равнозначно «пакет-приват».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top