Como restringir o acesso a uma propriedade de classe para apenas dentro do mesmo namespace

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Como restringir o acesso a uma propriedade de classe para dentro do mesmo namespace? Considere a seguinte classe. A classe de conteúdo não pode publicar-se, em vez da classe ContentService vai fazer algumas coisas antes de alterar o estado para publicado.

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;
        }
    }

Como posso torná-lo tão somente a classe ContentService pode alterar o estado do artigo?

Existem padrões deisng para me ajudar a lidar com isso?

Foi útil?

Solução

Você pode usar o modificador de acesso "interno" de modo que apenas as classes dentro da mesma Assembleia pode modificar Estado membro da classe de conteúdo (mas todos mesmo em outros conjuntos pode obter o valor).

public State Status { get; internal set; } 

Então, agora ContentService pode definir o estado, porque ele está na mesma Assembleia, mas os chamadores externos só pode obter o estado (que não estamos autorizados a defini-lo).

Outras dicas

Java tem a noção de "pacote visível" ou "pacote privado". Esta é de facto o padrão para qualquer coisa onde você não especificar a visibilidade (private ou public). Por algum motivo, quase ninguém usa isso.

Declare ContentService como um amigo ?

Como alternativa, Java tem um acesso modificador isso equivale a "pacote-privadas".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top