你应该使用成员变量或属性getter / setter吗?

时间:2012-12-28 15:33:35

标签: c# properties member-variables

  

可能重复:
  What is the difference between a field and a property in C#?

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

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

拥有大量受保护的属性实际上是一种代码味道,因为它有点破坏了封装。