동일한 네임 스페이스 내에서만 클래스 속성에 대한 액세스를 제한하는 방법

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

  •  06-07-2019
  •  | 
  •  

문제

동일한 네임 스페이스 내에서 클래스 속성에 대한 액세스를 어떻게 제한합니까? 다음 수업을 고려하십시오. 컨텐츠 클래스는 자체를 게시 할 수 없으며 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 클래스 만 기사의 상태를 변경할 수 있도록하려면 어떻게해야합니까?

내가 이것을 다루는 데 도움이되는 deisng 패턴이 있습니까?

도움이 되었습니까?

해결책

동일한 어셈블리 내의 클래스 만 콘텐츠 클래스의 상태 구성원을 수정할 수 있도록 "내부"액세스 수정자를 사용할 수 있습니다 (그러나 다른 어셈블리의 모든 사람은 값을 얻을 수 있습니다).

public State Status { get; internal set; } 

따라서 이제 Contentservice는 동일한 어셈블리에 있기 때문에 상태를 설정할 수 있지만 외부 발신자는 상태 만 얻을 수 있습니다 (설정할 수는 없습니다).

다른 팁

Java는 "패키지 가시적"또는 "패키지 개인"이라는 개념을 가지고 있습니다. 이것은 실제로 가시성을 지정하지 않는 모든 것에 대한 기본값입니다 (private 또는 public). 어떤 이유로 든, 거의 아무도 이것을 사용하지 않습니다.

목차 서비스를 a로 선언합니다 친구?

또는 Java는 an을 가지고 있습니다 액세스 수정 자 이는 "패키지-프라이버시"에 해당합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top