C#中的自动属性不是导致开销的吗?

时间:2011-12-20 16:06:24

标签: c# overhead automatic-properties

当我有自动属性并尝试从它的类中访问它时,它似乎是一个开销,因为我使用一个函数来访问我的类的成员而不是直接访问它。

如果这是正确的,我可以考虑在这种情况下不要使用自动属性吗?

4 个答案:

答案 0 :(得分:5)

您是否测量过任何理论开销并发现它具有重要意义?这是制定基于绩效的决策的关键。

在这种情况下,我完全希望JIT能够内联自动实现的属性,从而消除任何性能开销。 (我似乎记得看到float / double的情况,其中不是的情况,但那是一段时间以前 - 即便如此,开销也很小。)

答案 1 :(得分:3)

在这方面,自动属性与普通属性没有什么不同。

不要担心;无论如何,JITter通常会内联属性方法。

答案 2 :(得分:2)

你是对的。但是,某些机制需要属性,例如XML序列化程序不会序列化公共成员...

其他的东西是封装 - 你事先不知道你的类的每个属性的最终目的地是什么,所以如果你最初将它创建为属性,你可以稍后进入set / get实现。

答案 3 :(得分:0)

如果您遵循面向对象原则,则允许直接访问您的内部成员,从而违反封装原则。 Property机制(getters和setters方法)提供对这些成员的适当访问,以保护内部成员免受直接访问。