0

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

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

由于没有需要在 getter 或 setter 中执行的代码,并且它们的范围始终受到保护,所以有区别吗?

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

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

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

4

2 回答 2

4

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

于 2012-12-28T15:35:40.887 回答
0

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

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

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

于 2012-12-28T15:40:42.103 回答