应该使用成员变量还是属性getter/setter

本文关键字:属性 getter setter 变量 成员 | 更新日期: 2023-09-27 17:49:54

可能重复:
C#中的字段和属性有什么区别?

我经常需要在类/子类层次结构中创建受保护的变量。然而,我不断看到其他实现使用简单的get/set属性而不是变量。

既然getter或setter中没有需要执行的代码,而且它们的作用域总是受保护的,这有区别吗?

protected int foo1;
// vs
protected int foo2{ get; set; }

我知道前者的优点是你可以直接用一个值初始化它,但我想知道我是否还有其他需要注意的事情/限制。

注意:getter/setter中永远不会有代码的情况。这些只是内部计算指标的占位符,性能至关重要(甚至达到毫秒级(,这让我认为第一个更好,因为它完全绕过了getter/setter。

应该使用成员变量还是属性getter/setter

不同之处在于,如果稍后需要向getter/setter方法添加一些逻辑,则调用代码不会中断。

我为受保护的成员使用getter和setter,除非它是只读的,在这种情况下protected readonly就可以了。老实说,除非有人使用反射来迭代属性,否则这真的无关紧要——你总是可以将一个属性切换到另一个属性,它会编译得很好。

实际上,仔细想想,我通常只使用方法,因为我通常想要继承的是基本行为,而不是显式的基本状态。

拥有大量受保护的属性确实是一种代码气味,因为它在某种程度上破坏了封装。