当我有自动属性并尝试从它的类中访问它时,它似乎是一个开销,因为我使用一个函数来访问我的类的成员而不是直接访问它。
如果这是正确的,我可以考虑在这种情况下不要使用自动属性吗?
答案 0 :(得分:5)
您是否测量过任何理论开销并发现它具有重要意义?这是制定基于绩效的决策的关键。
在这种情况下,我完全希望JIT能够内联自动实现的属性,从而消除任何性能开销。 (我似乎记得看到float
/ double
的情况,其中不是的情况,但那是一段时间以前 - 即便如此,开销也很小。)
答案 1 :(得分:3)
在这方面,自动属性与普通属性没有什么不同。
不要担心;无论如何,JITter通常会内联属性方法。
答案 2 :(得分:2)
你是对的。但是,某些机制需要属性,例如XML序列化程序不会序列化公共成员...
其他的东西是封装 - 你事先不知道你的类的每个属性的最终目的地是什么,所以如果你最初将它创建为属性,你可以稍后进入set / get实现。
答案 3 :(得分:0)
如果您遵循面向对象原则,则允许直接访问您的内部成员,从而违反封装原则。 Property机制(getters和setters方法)提供对这些成员的适当访问,以保护内部成员免受直接访问。