如果我有这样一个简单的类设置:
class MyClass
{
private string _myName = string.Empty;
public string MyName
{
get
{
return _myName;
}
}
public void DoSomething()
{
// Get the name...
string name = string.Empty;
name = _myName;
// OR
name = MyName;
// ...and do something with it...
}
}
我应该使用哪个,公共财产或数据成员?
显然,在这个例子中它并没有什么区别,因为它们都只是引用相同的变量。但是公共财产的现实用途呢?
一般来说,公共属性执行的很少,在这种情况下可以调用它们吗?或者人们将大量功能放入他们的公共属性中,不应该被内部类引用调用?
我在另一篇文章中看到了一些关于不向Properties中添加大量功能的内容,因为在调试器中检查它们可以执行意外的结果。这是真的吗?
答案 0 :(得分:8)
使用属性 - 即使在类本身内,也可以应用封装在setter和getter中的任何逻辑。如果getter和setter中没有逻辑,那么使用字段本身仍然是不安全的,因为如果您希望在访问这些字段时添加逻辑,则必须重构更多。
答案 1 :(得分:5)
我认为您应该将该物业作为一般惯例参考。虽然在这个特定的例子中它确实没有太大的区别,但get / set访问器提供了在抓取属性时做更多工作的能力。例如,我们的许多属性“get”访问器在更复杂的数据结构中执行一些查找,或者如果没有定义任何内容则设置默认值。因此,类的其余部分可以利用这种逻辑,我们养成使用属性的习惯。正因为如此,我们不必过于考虑它,我们试图推广这种做法。
在某些情况下,我们可能希望直接访问基础数据成员,但这是一个有特定原因的有意识决策,而且往往是例外。
答案 2 :(得分:2)
我更喜欢属性,因为它们可以轻松处理只读情况,并且可以使用您可能需要进行的任何基本验证来轻松包装它们。
答案 3 :(得分:0)
如果我只是返回内部变量的值,我将变量公之于众 - 这样做没有坏处。当我想要回复查看或更改值时,我总是使用公共属性 - 即,将其写入数据库,设置其他内容(如示例的第二部分)。 / p>
您需要问的问题是,您是否希望类内发生的事情触发这些事件。如果您这样做,外部调用者将采用相同的方式,然后通过属性访问值。如果您只想读取值,请使用内部变量。
要回答你的问题,无论采取哪种方式都没有坏处 - 只考虑潜在的副作用。