我正在审查另一个开发人员的代码,他已经编写了很多类级变量的代码,类似于以下内容:
/// <summary>
/// how often to check for messages
/// </summary>
private int CheckForMessagesMilliSeconds { get; set; }
/// <summary>
/// application path
/// </summary>
private string AppPath { get; set; }
这种编码不会增加不必要的开销,因为变量是私有的吗?
我不是在考虑私有变量需要这种编码模式的情况吗?
答案 0 :(得分:9)
这就像说私有方法没有用处,因为它们增加了不必要的开销,并且没有人会在类外使用它们。
属性为您提供变量与其余代码之间的一个联系点。将来,您可能希望在变量发生更改时添加错误检查或更新其他值,并且属性可以让您这样做。
答案 1 :(得分:6)
当您将值分配给私有变量(由编译器为您创建)时,私有属性为您提供了抽象级别。这样做的效率并不低,如果您需要更改将来的分配方式,您只需要担心在一个地方更新它。
它还可以在应用程序中提供一致性。如果所有赋值都是通过属性完成的,那么有些可以验证赋值,而有些则不能。对于与财产接口的人,验证的和没有验证的人之间没有区别。 (这样有人不会意外地将值赋给不验证的局部变量。)
答案 2 :(得分:3)
不,jit编译器会将属性访问转换为支持字段上的直接变量访问,因此它的效率并不比直接使用成员变量有效。
优点是,如果您希望将属性转换为非平凡的实现,您只需将代码添加到get / set以允许其他检查或行为或不同的存储机制用于属性,而无需重构任何客户端代码(在这种情况下,都在同一个类中)。
答案 3 :(得分:3)
我认为养成使用属性而不是字段的习惯是一种好习惯 由于JIT可以内联getter和setter,因此开销可能很小甚至不存在。因此,虽然不是必需的,但这样做是没有错的。
答案 4 :(得分:1)
这将导致没有开销,更清晰和更易于维护的代码。
答案 5 :(得分:0)
查看此链接:
他们正在讨论同样的问题。
HTH
答案 6 :(得分:0)
性能问题可能是微不足道或不存在,但它需要您输入9个以上字符(+空格)才能获得收益。如果您以后想要将字段转换为属性,则无论如何都可以执行此操作,因为字段和属性完全源兼容(只要您不使用可变值类型)。
答案 7 :(得分:0)
我没有看到任何真正的好处,虽然我也没有看到任何伤害。如果您将来要将该物业转换为公共物品,可能会为您节省一些打字费用。但是,您多久会将私人会员转变为公共财产?当你这样做时,它可能只是你的班级中包含的许多成员中的一两件事。如果您要转换为非平凡的实现或添加任何类型的验证,您将需要将自动实现属性转换为具有真实支持字段的属性,这抵消了您可能认为您获得的任何简单优势。启动。
对我而言,这似乎是个人偏好的事情,没有性能影响,并且在进行未来的更改时会产生一些轻微的影响(正面和负面)。