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

8

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

如果可以,那么最好的实现方法是什么?


3
您已经查阅了哪些文档/资源? - Jon Skeet
可以,但是它们不能比属性本身的修饰符更容易访问,并且该属性必须同时具有get和set。 - Adam Houldsworth
1
实现这个?请发布您的剩余任务。 - Daniel Gehriger
@Daniel:你真的想替他完成他的作业吗? - Cody Gray
@所有人 虽然这听起来很像作业,但问题已经相当明确了。在这里展示的只是缺乏搜索技能和对“实现”属性的理解,即编写代码使其编译。肯定比正确标记它为作业的贬低和讽刺评论更有帮助,最好的情况下只是猜测。 - Adam Houldsworth
显示剩余3条评论
3个回答

15

是的,这是可能的。它被称为不对称访问者可达性(Asymmetric Accessor Accessibility),您可以阅读 MSDN 文档此页面。代码应该类似于:

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

然而,需要牢记以下几点重要注意事项:

  • 只能修改一个访问器(accessor)。
  • 对每个访问器的限制必须更加严格,不能比属性本身的可访问级别更少
  • 无法在接口或接口成员的显式实现上使用访问器修饰符。

另外需要注意的是,如果要在get或set上声明不同的修饰符,则必须同时指定get和set。 - Adam Houldsworth
@Adam:嗯,那很合理...如果你一开始只有一个这样的东西,为什么要在其上声明不同的修饰符呢? - Cody Gray
但根据对OP的回复类型,我将其作为明确的澄清添加。 - Adam Houldsworth

4

是的,你可以...

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

    public string Property2
    {
        get;
        protected set;
    }
}

etc.


1
-1:只有一个访问器可以有修饰符。此外,get或set不能具有“public”访问修饰符。 - Sandeep
@Sandeep - 已修改。你现在可以移除你的-1了。上面的代码编译通过。 - WraithNath

1

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

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

然而,如果您声明内部修饰符,则其可见性必须小于或等于外部修饰符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接