【发布时间】:2019-10-26 08:10:25
【问题描述】:
在我们使用带有支持字段的属性的情况下,就 OOP 和封装而言,直接访问这些支持字段是一种好习惯还是应该始终通过类属性?
public class SomeClass
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value == null ? "" : value; }
}
public void SetField()
{
...
_name = "alice";
...
}
public void SetProperty()
{
...
Name = "bob";
...
}
}
我的直觉是始终使用该属性,并且从不使用除 getter/setter 之外的字段,但我不知道这是个人偏好还是有首选标准或规则。
只是为了澄清,因为我不想被误解,我知道设置 _name 和 Name 是不同的东西,我并不是在问像我的示例中这样的设置器是否是一个好主意。
编辑: 我没有问我是否以及何时应该使用重复的问题/答案提及的自动属性。
【问题讨论】:
-
(因为我们不能依赖自动属性) -- 为什么不呢?
-
@DanielMann 因为你不能在他们的 getter/setter 中创建任何主体来在那里实现一些业务逻辑?例如。在设置实际值之前进行一些验证?
-
@DanielMann 可以说你在 getter/setter 中有一些额外的逻辑
-
@HimBromBeere 你甚至没有阅读我的问题并且你将它标记为重复,我没有问我是否应该使用自动实现
-
为什么你会“需要”一个公共方法来设置一个公共属性?在 getter/setter 中需要额外的逻辑仅仅意味着在这种情况下自动实现的 prop 是错误的选择。这并不意味着他们不能被依赖