当从类外部访问成员时,封装显然是有用且必不可少的,但在内部引用类变量时,调用其私有成员或使用其getter更好吗?如果你的getter只返回变量,那么是否有性能差异?
答案 0 :(得分:9)
应该没有显着的性能差异,并且你坚持使用这些属性的原因是因为这是封装的全部要点。它使这些私有成员的所有访问保持一致和受控。因此,如果您想更改属性getter / setter,您不必考虑“我是否需要在我决定直接访问私有成员的地方复制相同的功能?”
答案 1 :(得分:7)
直接访问字段或使用getter通常没有太大区别,除非你的getter执行一些延迟初始化或其他处理。所以它取决于getter的作用,但我的经验法则是在特定情况下始终使用getter。
要为字段指定值,请不要忘记setter通常包含验证码或引发事件。在这种情况下,您应该始终使用setter。
答案 2 :(得分:4)
在获取或设置上进行验证的情况下,将获益。这将在一个地方,并始终被称为。
据我所知(来自Stack Overflow上的其他问题),当Getter只返回值时,生成的代码与直接访问变量的代码相同。
答案 3 :(得分:1)
在98%的时间内,性能差异可以忽略不计。
即使你的getter或setter只是获取或设置你的私有成员,你也应该总是使用属性。这将允许您随着应用程序的发展而进行更改。这样做,您将能够在您的属性中带来一些限制或其他封装,而不会破坏您的代码。否则,一旦您决定根据原因X编写属性,您将发现自己有义务重构所有代码以获取或设置属性而不是您的私有成员。
答案 4 :(得分:1)
我喜欢使用内部属性进行延迟初始化,在属性中确保对象已初始化。这可以确保我没有使用尚未初始化的类级别变量。
TestClass1 _class1
internal TestClass1
{
get
{
if (_class == null)
_class = new TestClass1()
return _class1
}
}