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