可以为属性的 get 和 set 访问器指定单独的访问修饰符吗?

Posted

技术标签:

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

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

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

【问题讨论】:

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

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

【讨论】:

以上是关于可以为属性的 get 和 set 访问器指定单独的访问修饰符吗?的主要内容,如果未能解决你的问题,请参考以下文章

C#属性访问器

关于C# get set的简单用法

Unity - Get/Set 属性访问器

Unity - Get/Set 属性访问器

c语言中get的用法

Python中的property类和@property装饰器