使用getter和setter声明私有财产有什么好处吗?

时间:2010-04-13 17:37:29

标签: c# .net conventions

我正在审查另一个开发人员的代码,他已经编写了很多类级变量的代码,类似于以下内容:

    /// <summary>
    /// how often to check for messages
    /// </summary>
    private int CheckForMessagesMilliSeconds { get; set; }

    /// <summary>
    /// application path
    /// </summary>
    private string AppPath { get; set; }

这种编码不会增加不必要的开销,因为变量是私有的吗?

我不是在考虑私有变量需要这种编码模式的情况吗?

8 个答案:

答案 0 :(得分:9)

这就像说私有方法没有用处,因为它们增加了不必要的开销,并且没有人会在类外使用它们。

属性为您提供变量与其余代码之间的一个联系点。将来,您可能希望在变量发生更改时添加错误检查或更新其他值,并且属性可以让您这样做。

答案 1 :(得分:6)

当您将值分配给私有变量(由编译器为您创建)时,私有属性为您提供了抽象级别。这样做的效率并不低,如果您需要更改将来的分配方式,您只需要担心在一个地方更新它。

它还可以在应用程序中提供一致性。如果所有赋值都是通过属性完成的,那么有些可以验证赋值,而有些则不能。对于与财产接口的人,验证的和没有验证的人之间没有区别。 (这样有人不会意外地将值赋给不验证的局部变量。)

答案 2 :(得分:3)

不,jit编译器会将属性访问转换为支持字段上的直接变量访问,因此它的效率并不比直接使用成员变量有效。

优点是,如果您希望将属性转换为非平凡的实现,您只需将代码添加到get / set以允许其他检查或行为或不同的存储机制用于属性,而无需重构任何客户端代码(在这种情况下,都在同一个类中)。

答案 3 :(得分:3)

我认为养成使用属性而不是字段的习惯是一种好习惯 由于JIT可以内联getter和setter,因此开销可能很小甚至不存在。因此,虽然不是必需的,但这样做是没有错的。

答案 4 :(得分:1)

IIRC,编译器将优化对属性的访问,最终将直接引用自动生成的后备字段。

这将导致没有开销,更清晰和更易于维护的代码。

答案 5 :(得分:0)

答案 6 :(得分:0)

性能问题可能是微不足道或不存在,但它需要您输入9个以上字符(+空格)才能获得收益。如果您以后想要将字段转换为属性,则无论如何都可以执行此操作,因为字段和属性完全源兼容(只要您不使用可变值类型)。

答案 7 :(得分:0)

我没有看到任何真正的好处,虽然我也没有看到任何伤害。如果您将来要将该物业转换为公共物品,可能会为您节省一些打字费用。但是,您多久会将私人会员转变为公共财产?当你这样做时,它可能只是你的班级中包含的许多成员中的一两件事。如果您要转换为非平凡的实现或添加任何类型的验证,您将需要将自动实现属性转换为具有真实支持字段的属性,这抵消了您可能认为您获得的任何简单优势。启动。

对我而言,这似乎是个人偏好的事情,没有性能影响,并且在进行未来的更改时会产生一些轻微的影响(正面和负面)。