2012-07-04 52 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 *則...再次讀取該錯誤消息;它不會說「因爲它被用作財產」;此外,所有使用的類型都遵循這些可見性/可訪問性規則,而不僅僅是代表。 – 2012-07-04 05:14:13

回答

4

MyDelegate是公共財產Del的簽名的一部分。

如果有東西消耗了返回值Del,那肯定需要返回的類型的定義。

換句話說,如果一些其它類具有MyClass這樣一個實例:

MyClass myclass = new MyClass(); 
MyDelegate del = myclass.Del; 

將是不可能的,除非是MyDelegate已知的是類的類型。

+0

+1現在看來很明顯,你是這樣解釋的。 – user943870

5

如果您將MyDelegate定義爲私有類型,MyClass的使用者如何知道Del的類型?這就像你定義一個私人類,並嘗試在公共財產中使用該私人類

1

MyDelegate是屬性類型DelMyClass的方式將是類實例的類型。如果您的課程不公開,您將無法從外部代碼創建該課程的實例。

這裏的情況也是如此。外部代碼無法訪問類型MyDelegate,並不知道該如何處理該屬性。

相關問題