【问题标题】:Property visibility in abstract class抽象类中的属性可见性
【发布时间】:2010-01-27 15:30:32
【问题描述】:

有人知道关于在抽象类或父类中的公共属性后面定义属性可见性(私有或受保护)的方法的 C# 最佳实践吗?

在其他世界中,默认情况下最佳实践是什么(以及为什么):

public abstract class MyClass
{
    private string myAttribute;

    public string MyAttribute
    {
        get { return myAttribute; }
        set { myAttribute = value; }
    }
}

public abstract class MyClass
{
    protected string myAttribute;

    public string MyAttribute
    {
        get { return myAttribute; }
        set { myAttribute = value; }
    }
}

我认为子类应该有办法直接处理这个受保护的属性,但如果 getter 或 setter 包含更多代码,这可能不是一个好习惯......

你怎么看?

谢谢。

【问题讨论】:

    标签: c# properties


    【解决方案1】:

    非常量字段应该始终是私有的。如果由于某种原因无法使用自动属性而需要使用字段,请确保它是私有的。子类应通过公共或受保护的属性访问它。

    【讨论】:

    • 就此而言,我认为即使包含类也只能通过属性访问。
    【解决方案2】:

    绝对私密。但是,有一种更简单的方法来做你正在做的事情:

    public abstract class MyClass
    {
        public string MyAttribute { get; set; }
    }
    

    这完全一样,但它更容易维护。

    【讨论】:

    • +1,当在 getter/setter 中不需要进行特殊处理时,这很有用。您还可以通过 public 和 private 限制 getter 和 setter 的可见性。
    • 好吧,我不知道自动实现的属性!
    【解决方案3】:

    绝对私密。在定义抽象类时,我仅在满足以下行为时才将项目设为受保护

    1. 子类必须覆盖或有权访问
    2. 外部类不应访问

    在这种情况下,您已经授予外部类访问该值的权限。使其受到保护并没有给子类带来任何真正的优势。

    【讨论】:

    • 我赞成您的答案,并指出它应该是正确的答案。私有支持字段绝对是常态,但在极少数情况下您需要覆盖属性。
    【解决方案4】:

    我发现 public get, protected set 的一个限制:cmets。 因为 cmets 对于 public 和 protected 不应该是相同的,尊重 stylecop: - 公众评论:获取评论 - 受保护的评论:获取或设置评论

    我不想为两个可见性都做 2 个属性,所以我用以下评论快速解决了这个问题:Gets ot set (protected) comment。

    如果你有更好的做法,欢迎。

    【讨论】:

      猜你喜欢
      • 2015-05-18
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      相关资源
      最近更新 更多