只是想知道......
有没有理由不使用受保护的属性?
我的意思是代替使用它:
public abstract class Foo
{
protected Bar { get; private set; }
}
使用这个:
public abstract class Foo
{
private Bar _bar;
protected Foo(Bar bar)
{
_bar = bar;
}
protected GetBar()
{
return _bar;
}
}
答案 0 :(得分:9)
我认为没有任何理由可以使用GetXXX()
方法而不是属性而不管它的修饰符。
由于您使用C#
标记标记了此问题,因此我严格建议您使用第一种方法。这就是属性的用途。
只有在每次调用它时返回的值可能不同时才使用方法,无论其状态如何。例如,DateTime.Now
是一个错误,应该是一种方法。
有关详细信息,请参阅属性Usage Guidelines on MSDN
。另一方面,令人惊讶的是,自Framework 1.1
以来他们没有必要对其进行更改。
答案 1 :(得分:1)
使用属性而不是方法的其他几个原因:
答案 2 :(得分:0)
只有在类
中有不可写或不可读的属性时答案 3 :(得分:0)
问题不在于protected
它有更多用于:我为什么要使用属性?
Propeties在逻辑上等同于Getter / Setter方法对,无论你使用Name {get{} \ set{}}
使用GetName() \ SetName()
对可以做什么,反之亦然,尤其是当C#具有getter和setter访问器时,所以我们也可以使用辅助功能。
但是,有些人认为公共(或受保护)属性有点像从OOP角度作弊,特别是如果属性所做的只是公开支持字段。毕竟person.Name = "SWeko"
似乎在外部改变了对象的状态,而person.SetName("SWeko")
只是告诉对象它需要改变它的状态。从纯理论的角度来看,我认为这些反对意见是有道理的。
然而,并非我们所有人都拥有象牙塔的奢侈品,所以属性的概念非常有用,因为它更易读,更不容易出错,而恕我直言,更接近现实世界的模型。当我写这样的东西时,它也为我们提供了一种二分法:
person.Name = "SWeko";
person.Work();
我希望第一行是快速赋值,并且不会产生副作用,而我希望第二行会做更多的事情,并且可能会影响对象的内部状态。当我使用Getter和Setter方法时,没有明显的这种干扰:
person.SetName("SWeko");
person.Work();