2010-01-27 119 views
3

是否有人知道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; } 
    } 
} 

我认为孩子的类都应具有直接处理这个保护属性的方式,但它可能不是一个好的做法,如果吸气剂或二手药含有更多的代码...

你对此有何看法?

谢谢。

回答

8

非常量字段应该总是保密的。如果因为某些原因无法使用自动属性而需要使用字段,请确保它是私人的。儿童班应通过公共或受保护的财产访问它。

+0

对于这个问题,我想甚至包含类应该只能通过属性访问。 – 2010-01-27 15:38:18

2

绝对私密。然而,有一个更简单的方法来做你正在做的事情:

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

这是完全相同的事情,但它更容易维护。

+1

+1,这在没有特殊处理需要在getters/setters中完成时很有用。你也可以限制公共和私人获取者和制定者的可见性。 – FrustratedWithFormsDesigner 2010-01-27 15:43:52

+0

好的,我不知道自动实现的属性! – Vince 2010-01-27 15:50:10

2

绝对私密。当定义一个抽象类,我只是做保护的项目如果符合以下

  1. 子类必须重写或访问
  2. 外部类应该不能访问

在行为这种情况下,你已经给外部类访问该值。保护它并不会给子类带来任何真正的优势。

+0

感谢你们所有人 – Vince 2010-01-27 15:40:40

+0

我对你的答案大加赞赏,指出它应该是正确的答案。私人支持字段绝对是常态,但在极少数情况下,您需要重写属性。 – 2014-02-09 21:52:29

0

我发现公共获取的一个限制,受保护的设置:评论。 因为意见不应该成为公众和保护的同时,尊重了StyleCop: - 评公众:获取评论 - 评为保护:获取或设置评论

我不想两个知名度做2个属性,所以我解决它quiclky与下面的评论:获取ot设置(保护)评论。

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