您是否在类本身中使用数据成员或公共属性?

如果我有一个像这样的简单类设置:

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... } } 

我应该使用哪个,公共财产或数据成员?

显然,在这个例子中它并没有什么区别,因为它们都只是引用相同的变量。 但是公共财产的现实用途呢?

一般来说,公共属性执行得非常少,在这种情况下可以调用它们吗? 或者人们将大量function放入他们的公共属性中,不应该被内部类引用调用?

我在另一篇文章中看到了一些关于不向Properties中添加大量function的内容,因为在调试器中检查它们可以执行意外的结果。 真的吗?

使用属性 – 即使在类本身内,也可以应用封装在setter和getter中的任何逻辑。 如果getter和setter中没有逻辑,那么使用字段本身仍然是不安全的,因为如果您希望在访问这些字段的过程中添加逻辑,则必须重构更多。

我相信您应该将该物业作为一般惯例参考。 虽然在这个特定的例子中它确实没有太大的区别,但get / set访问器提供了在抓取属性时做更多工作的能力。 例如,我们的许多属性“get”访问器在更复杂的数据结构中执行一些查找,或者如果没有定义任何内容则设置默认值。 因此,类的其余部分可以利用这种逻辑,我们养成使用属性的习惯。 因此,我们不必过于考虑它,我们试图概括实践。

可能存在我们想要直接访问底层数据成员的情况,但这是一个有特定原因的有意识决策,它往往是例外。

我更喜欢属性,因为它们很容易处理只读情况,并且很容易用您可能需要做的任何基本validation来包装它们。

如果我只是返回内部变量的值,我将变量公之于众 – 这样做没有坏处。 我总是使用公共属性,当我想要做一些事情来回应查看或更改值 – 即,将其写入数据库,设置其他东西(如示例的第二部分)。

您需要问的问题是,您是否希望类内发生的事情触发这些事件。 如果这样做,就像外部调用者一样,然后通过属性访问值。 如果您只想读取值,请使用内部变量。

要回答你的问题,无论采取哪种方式都没有坏处 – 只考虑潜在的副作用。