Comment restreindre l'accès à une propriété de classe uniquement dans le même espace de noms

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

  •  06-07-2019
  •  | 
  •  

Question

Comment restreindre l'accès à une propriété de classe au sein du même espace de nom? Considérez le cours suivant. La classe Content ne peut pas se publier elle-même, mais la classe ContentService. fera quelques choses avant de changer l'état en publication.

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

Comment puis-je faire en sorte que seule la classe ContentService puisse modifier l'état de l'article?

Existe-t-il des schémas de désengagement pour m'aider à gérer cela?

Était-ce utile?

La solution

Vous pouvez utiliser l'option "interne". modificateur d'accès afin que seules les classes d'un même assemblage puissent modifier le membre d'état de la classe de contenu (mais que même tous les assemblys peuvent obtenir la valeur).

public State Status { get; internal set; } 

Alors maintenant, ContentService peut définir l'état car il se trouve dans le même assemblage, mais les appelants externes ne peuvent obtenir que l'état (ils ne sont pas autorisés à le définir).

Autres conseils

Java a la notion de "package visible". ou "colis privé". Il s'agit en fait de la valeur par défaut pour tout élément pour lequel vous ne spécifiez pas de visibilité ( privé ou public ). Pour une raison quelconque, presque personne ne l'utilise jamais.

Déclarez ContentService en tant que ami ?

Sinon, Java dispose d'un modificateur d'accès . cela équivaut à "package-private".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top