2012-07-04 2 views
1
class MyClass 
{ 
    **private** delegate void MyDelegate(); //error: MyDelegate is less accessible than property Del 
    private MyDelegate del; 
    public MyDelegate Del 
    { 
     get { return this.del; } 
     set { this.del = value; } 
    } 
} 

공개 수정 사항으로 변경하지만 이유를 자세히 알고 싶습니다.대리인을 재산으로 사용하는 경우 왜 공개해야합니까?

+1

속성이 * private * 인 경우 ... 오류 메시지를 다시 읽습니다. 그것은 "재산으로 사용되기 때문에"말하지 않습니다; 또한 사용되는 모든 유형은 위임/액세스 가능성 규칙을 따르며 대의원이 아닙니다. –

답변

4

MyDelegate은 공공 재산 Del의 서명입니다.

무언가가 Del의 반환 값을 사용하면 확실히 반환되는 유형의 정의가 필요합니다. 즉

, 다른 클래스는이 같은 MyClass의 인스턴스가있는 경우 : MyDelegate 해당 클래스에 알려진 유형이 아닌
MyClass myclass = new MyClass(); 
MyDelegate del = myclass.Del; 

이 가능하지 않을 것입니다.

+0

+1 당신이 그런 식으로 설명 했으니 이제 분명 해 보입니다. – user943870

5

MyDelegate를 개인용으로 정의한 경우, MyClass의 소비자는 Del의 유형을 어떻게 알고 있습니까? 그것은 당신이 개인 클래스를 정의하고 공용 속성에서 그 개인 클래스를 사용하려고 시도하는 것과 같습니다.

1

MyDelegate은 속성 유형이 Del입니다. 방법 MyClass은 클래스 인스턴스의 유형입니다. 클래스가 공개되지 않은 경우 외부 코드에서 클래스의 인스턴스를 만들 수 없게됩니다.

여기 같은 경우입니다. 바깥 쪽 코드는 MyDelegate 유형에 액세스 할 수 없으며 해당 속성으로 수행 할 작업을 알지 못합니다.

관련 문제