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