为什么代表在用作财产时必须公开?

时间:2012-07-04 05:08:57

标签: c# properties delegates

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

更改为公开修复,但我想更详细地了解原因。

3 个答案:

答案 0 :(得分:5)

如果将MyDelegate定义为私有类型,MyClass的使用者如何知道Del的类型?这就像你定义一个私有类并尝试在公共属性中使用该私有类

答案 1 :(得分:4)

MyDelegate是公共财产Del签名的一部分。

如果某些内容消耗Del的返回值,则肯定需要返回类型的定义。

换句话说,如果其他一些类的实例MyClass是这样的:

MyClass myclass = new MyClass();
MyDelegate del = myclass.Del;
除非MyDelegate是该类已知的类型,否则

将无法实现。

答案 2 :(得分:1)

MyDelegate是属性Del的类型。 MyClass的方式是类实例的类型。如果您的类不是公共的,那么您将无法从外部代码创建该类的实例。

这里的情况也是如此。外部代码无法访问类型MyDelegate,并且不知道如何处理该属性。