【问题标题】:Can separate access modifiers be specified for the get and set accessors of a property?可以为属性的 get 和 set 访问器指定单独的访问修饰符吗?
【发布时间】:2011-06-12 09:53:45
【问题描述】:

我们可以为 C#/.NET 中属性的 get 和 set 访问器指定访问修饰符吗?

如果是这样,实现这一点的最佳方法是什么?

【问题讨论】:

  • 您已经看过哪些文档/资源?
  • 是的,你可以,但它们不能比赋予属性本身的修饰符更容易访问,并且属性必须同时具有 get 和 set。
  • 实现这个?请发布您的剩余作业。
  • @Daniel:你真的想为他完成剩下的任务吗?
  • @Cody Gray:我用 包装了我的评论,但它忘记了这不会出现在 cmets 中。

标签: c# .net properties access-modifiers


【解决方案1】:

是的,你可以...

public class Example
{
    public string Property
    {
        get;
        private set;
    }

    public string Property2
    {
        get;
        protected set;
    }
}

等等

【讨论】:

  • -1 :只有任何一个访问者可以拥有修饰符。此外,get 或 set 不能有“public”访问修饰符。
  • @Sandeep - 已修改。您现在可以删除您的 -1。上面的代码构建良好
【解决方案2】:

是的,这是可能的。它称为非对称访问器可访问性,您可以阅读 MSDN 文档on this page。代码看起来像这样:

public int Age
{
    get
    {
        return _age;
    }
    protected set
    {
        _age = value;
    }
}

但是,有几个重要的注意事项需要牢记:

  • 只能修改一个访问器。
  • 对单个访问者施加的任何限制都必须更多比属性本身的可访问性级别限制,而不是更少。
  • 您不能在接口或接口成员的显式实现上使用访问器修饰符。

【讨论】:

  • +另一个警告,必须同时指定 get 和 set 才能在 get 或 set 上声明不同的修饰符。
  • @Adam:嗯,这有点道理......如果你只有其中一个东西,你为什么需要在某物上声明一个 不同 修饰符第一名?
  • 完全正确,但根据对 OP 的响应类型,我添加了明确的说明。
【解决方案3】:

http://msdn.microsoft.com/en-us/library/ms173121.aspx 显示可能的修饰符。如果你想有不同的修饰符,写:

[Modifier] [DataType] ProperyName{
    [Modifier] get{}
    [Modifier] set{}
}

但是,如果您声明内部修饰符,它们的可见性必须小于或等于外部修饰符。

【讨论】:

    猜你喜欢
    • 2014-03-06
    • 2015-10-06
    • 2013-03-09
    • 2012-11-22
    • 2012-04-19
    • 2017-06-13
    • 2013-04-11
    • 2013-09-18
    • 2010-10-27
    相关资源
    最近更新 更多