如果您有一个获取并设置为实例变量的Property,那么通常您总是使用该类外部的Property来访问它。
我的问题是你是否也应该在课堂上这样做?我总是使用该属性,如果有一个,即使在课堂上,但是想听到一些论据支持和反对哪个是最正确的,为什么。
或者只是在项目中使用编码标准的问题?
答案 0 :(得分:23)
通过属性访问本地(类范围)变量的一个更强大的理由是,在类中添加抽象级别。如果您更改任何逻辑有关该字段的存储方式,那么其余代码将不受影响。
例如,您可以将其从局部变量更改为子对象的属性,更改为数据库调用,更改为Web服务调用,更改为类上的静态属性等。在进行更改时,它会为您提供单点更改,属性,并且您不必更新类的其余部分,因为它们都使用该属性。
此外,使用该属性还可以对属性值应用业务规则,而不必在您直接访问该字段的每个位置强制执行相同的规则。再次,封装
随着自动属性的引入,显式拥有局部变量的理由更少,除非您需要在get / set上应用业务规则
答案 1 :(得分:9)
这取决于您是否要应用属性设置器中实现的任何逻辑,因此您必须根据具体情况决定。
当您直接进入私人领域时,您知道该字段正在设置为您所说的内容。
当您浏览属性时,将根据setter逻辑设置值,因此您可以获得所需的任何业务规则或验证,而不是分配给该字段的值。
很难想出一个关于什么时候做'正确'的规则,关于我所说的唯一一个规则是在构造函数初始化中我几乎从不使用该属性。
答案 2 :(得分:0)
我认为这纯粹是偏好。
尽管如此,我发现自己在C#3.0中使用自动属性支持更多地使用了这些属性:
class Foo {
public string Value { get; set; }
public void Write() {
Console.Write(Value);
}
}
答案 3 :(得分:0)
通常,根据项目编码标准,我在私有类属性的名称前面使用“_”或“m”。 (如下所示)
private int mVariable;
private int _Variable;
在变量前面的那些我立即认识到我正在处理类的内部变量。然后,当涉及到我自己或其他人的调试时,可以立即认识到代码正在处理内部私有变量并进行调整。所以它归结为对我的可读性。
答案 4 :(得分:0)
是的我认为你应该尽可能在课堂内部使用属性。属性更灵活,允许您添加逻辑以在中心位置验证其值。
您还可以将字段的初始化延迟到使用属性时,而不是强制在构造函数中执行此操作(或使用字段的任何位置)。例如:
class Test {
private int _checksum = -1;
private int Checksum {
get {
if (_checksum == -1)
_checksum = calculateChecksum();
return checksum;
}
}
}
答案 5 :(得分:0)
始终使用属性,以下是一些原因