抽象类中的属性可见性

时间:2010-01-27 15:30:32

标签: c# properties

有人知道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包含更多的代码,这可能不是一个好习惯......

你怎么看?

谢谢。

4 个答案:

答案 0 :(得分:8)

非常量字段应该始终是私有的。如果由于某些原因无法使用自动属性而需要使用字段,请确保它是私有的。儿童班应通过公共或受保护的财产进入。

答案 1 :(得分:2)

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

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

这完全相同,但它更容易维护。

答案 2 :(得分:2)

绝对私密。在定义抽象类时,如果它是符合以下

的行为,则仅保护项目
  1. 子类必须覆盖或有权访问
  2. 外部课程不应有权访问
  3. 在这种情况下,您已经为外部类提供了访问该值的权限。保护它并不会给子类带来任何真正的好处。

答案 3 :(得分:0)

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

我不想为两个可见性做两个属性,所以我用以下注释解决了它quiclky:获取ot set(protected)comment。

如果你有更好的练习,欢迎。