¿Cómo restringir el acceso a una propiedad de clase solo dentro del mismo espacio de nombres?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

¿Cómo restringir el acceso a una propiedad de clase dentro del mismo espacio de nombres? Considere la siguiente clase. La clase Content no puede publicarse, en lugar de la clase ContentService Hará algunas cosas antes de cambiar el estado a 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;
        }
    }

¿Cómo puedo hacerlo para que solo la clase ContentService pueda cambiar el estado del artículo?

¿Hay algún patrón de diseño que me ayude a lidiar con esto?

¿Fue útil?

Solución

Puedes usar el " interno " modificador de acceso para que solo las clases dentro de la misma Asamblea puedan modificar el miembro del Estado de la clase de Contenido (pero todos, incluso en otras asambleas, pueden OBTENER el valor).

public State Status { get; internal set; } 

Así que ahora ContentService puede establecer el estado porque está en la misma Asamblea, pero los llamantes externos solo pueden obtener el estado (no se les permite establecerlo).

Otros consejos

Java tiene la noción de " paquete visible " o " paquete privado " ;. De hecho, este es el valor predeterminado para cualquier cosa donde no especifique una visibilidad ( private o public ). Por alguna razón, casi nadie usa esto.

Declare ContentService como amigo ?

Alternativamente, Java tiene un modificador de acceso eso equivale a " paquete-privado " ;.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top