我应该在C#程序中使用属性还是应该使用get/set访问器?

我应该在C#程序中使用属性还是应该使用get/set访问器?,c#,properties,coding-style,C#,Properties,Coding Style,我在读一本Rob Miles写的名为《C#Yellow book》的书时,偶然发现了这样一句话: 程序员喜欢新的闪亮玩具。他们非常热衷于使用语言功能来炫耀自己。属性可以有点像这样。当考虑属性与get和set方法时,我相当喜欢老式的get和set方法,因为你知道这些方法在哪里。另一方面,如果使用正确的方式,我可以看到属性可以使生活更轻松 我不太清楚他这是什么意思。你们有什么建议?MS建议什么? < P>我认为你应该考虑一点非编程建议 入乡随俗 .NET的所有库、设计器和代码生成器都具有根深蒂固的属

我在读一本Rob Miles写的名为《C#Yellow book》的书时,偶然发现了这样一句话:

程序员喜欢新的闪亮玩具。他们非常热衷于使用语言功能来炫耀自己。属性可以有点像这样。当考虑属性与get和set方法时,我相当喜欢老式的get和set方法,因为你知道这些方法在哪里。另一方面,如果使用正确的方式,我可以看到属性可以使生活更轻松


我不太清楚他这是什么意思。你们有什么建议?MS建议什么?

< P>我认为你应该考虑一点非编程建议

入乡随俗

.NET的所有库、设计器和代码生成器都具有根深蒂固的属性。它几乎是平台的一个可插入部分。如果您选择使用get/set访问器而不是普通属性,那么您将创建一个与其他程序员所期望的外观截然不同的库


使用get/set访问器只会增加创建与各种工具不兼容的代码的机会。例如,有许多工具提供特殊的案例属性和字段,并为它们提供特殊的功能。您将有一个等效的构造,但没有工具支持

我喜欢房地产。在“类库的设计指南”中,他们建议使用属性(特别是对于独立于其他状态的状态)。

考虑这一点的最佳方法是与真实对象进行比较。让我们说你是一个在现实生活中需要设计的人。在头发的颜色、高度和宽度等方面,你会称你的一些属性为什么?一旦你开始思考这些问题,这将更有帮助,因为每个人都有自己的思考方式。

我不知道罗布·迈尔斯是谁,但如果你的话是准确的,那么我已经对他失去了尊重


NET中的所有内容都使用属性。如果您的代码不使用属性,那么它将是唯一一个不使用的代码。

如果您不使用属性,那么您将丢失一个非常突出的特性,我认为它在.NET:绑定中非常有用。您只能绑定到.NET中的属性或从中绑定属性,因此,如果您使用get/set访问器,则无法很好地与其他访问器配合

myObject.Property++;
与:

myObject.SetProperty(myObject.GetProperty() + 1);


显式getter/setter方法应该在完成非琐碎的计算/处理时使用,以便在执行实际操作时使用。

几年前,作为一名Java程序员,我写了这本书的这一部分,当时我正转向C。我想我会在下一个版本中重温这篇文章,让它更清楚一点

如果您想确保类的用户在使用某个对象时知道某些代码将要运行,那么将其放入方法中会使其显式化。此外,使用方法允许您返回错误条件,而不必抛出异常。没有性能影响,因为编译器无论如何都会将属性转换为方法


不过,我在编写的代码中经常使用属性,特别是对于state之类的东西。我从来没有真正提倡不使用属性,更多地确保在正确的情况下使用正确的东西。

在.NET中复制一些需要注意的属性,不要像在Java中那样产生性能开销。@Soviut:你是说那些不存在的Java属性?我不想知道他对接口的看法…@Jesse Slicer:我也不同意他的看法。但是这本书的其余部分还不错,如果非要我猜的话,这句话出自一本在1.0发行时或之前(即7年多以前)写的书。在那个时候,如果你是一个死硬的Java程序员,你会更容易理解。欢迎来到Stackoverflow;-)乔纳森在约翰·桑德斯的回答中的评论真是一针见血。知道什么时候使用属性,什么时候使用方法是一件很好的事情。事实上,微软很清楚地告诉你什么时候应该使用它们。但是,您似乎主张使用get/set方法而不是属性,这在C#中是不正确的-如果这不是您的意图,可能需要一些澄清?“使用get/set访问器只会增加您创建与各种工具不兼容的代码的机会。”-事实上,对于“工具”的一个非常宽泛的定义!想想WinForms/ASP.NET/WPF中的数据绑定,例如。。。