加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么私有字段可以访问,私有setter无法从静态方法访问?

发布时间:2020-12-15 19:47:18 所属栏目:百科 来源:网络整理
导读:以下给出了编译错误: private ObservableEventListener Listener { get; private set; } public static void Register() { Log.Listener = new ObservableEventListener(); Log.Listener.EnableEvents(Log,EventLevel.LogAlways,EventKeywords.None); } Err
以下给出了编译错误:

private ObservableEventListener Listener { get; private set; }

    public static void Register()
    {
        Log.Listener = new ObservableEventListener();
        Log.Listener.EnableEvents(Log,EventLevel.LogAlways,EventKeywords.None); 
    }

Error 26 The accessibility modifier of the ‘MyEventSource.Listener.set’ accessor must be more restrictive than the property or indexer ‘MyEventSource.Listener’

但这编译得很好:

private ObservableEventListener Listener;

    public static void Register()
    {
        Log.Listener = new ObservableEventListener();
        Log.Listener.EnableEvents(Log,EventKeywords.None);

    }

看来,支持setter方法有更多的安全性吗?总是有冗余的代码/警告行.为什么这是一个错误?

解决方法

你在setter上指定了private,这通常很好,除了你把成员私有化.

私有不比私有更严格,这违反了错误中引用的规则,即:

The accessibility modifier of the ‘MyEventSource.Listener.set’
accessor must be more restrictive than the property or indexer
‘MyEventSource.Listener’

也许语言设计者应该允许相同的限制性,但他们没有,所以编译失败.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读