可能重复:
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。
答案 0 :(得分:4)
不同之处在于,如果稍后需要在getter / setter方法中添加一些逻辑,则调用代码不会中断。
答案 1 :(得分:0)
我为受保护的成员使用getter和setter,除非它是只读的,在这种情况下protected readonly
会很好。老实说,除非有人使用反射来迭代属性,否则它确实无关紧要 - 你总是可以将一个切换到另一个并且编译得很好。
实际上,想到它,我通常只使用方法,因为我通常想要继承的东西是基本行为,而不是显式基本状态。
拥有大量受保护的属性实际上是一种代码味道,因为它有点破坏了封装。