1
25
让代码在不确定的未来工作可能很困难,但这并不是懒惰的借口。在字段上对属性进行编码是约定的,而且是实用的。称之为防御编程。 其他人也会抱怨存在速度问题,但是Jit'er足够聪明,可以让它和公开一个公共领域一样快。足够快,我永远不会注意到。 想到一些不平凡的事情
您只需额外输入13个字符来保证正确性。这似乎不像是推测性的概括性。有一个语义上的差异,如果没有其他的区别,一个属性有一个不同的语义意义,比一个公共字段灵活得多。
我记得有一次我第一次使用.NET时,我把一些类编码为字段,然后出于某种原因需要将它们作为属性,而当我第一次就可以正确地完成时,这是完全浪费时间的。 你有什么理由 不 遵循惯例?你为什么觉得有必要逆流而上?不这么做是什么拯救了你? |
2
13
我有一个微不足道的属性,在调试时可以节省几次。.NET不支持数据断点(读或写)的概念。在调试非常复杂的场景时,偶尔跟踪对特定属性的读/写是很重要的。这对于一个属性来说很容易,但是对于一个字段来说是不可能的。 如果您不在生产环境中工作,那么为了调试的目的重构field->属性很简单。偶尔,您会遇到一些只在生产环境中复制的错误,这些错误很难用新的二进制文件进行修补。一个属性可以在这里保存您。 不过,这是一个相当有限的情况。 |
3
12
我以前也这么想,杰伊。如果一个属性只提供 直接的 访问私人成员?如果你能把它描述成一个自动属性,那么拥有一个属性而不是一个字段似乎有点愚蠢。即使您需要更改实现,您也可以稍后重构为不动产,任何依赖代码仍然可以工作,对吗?嗯,也许不是。 你看,我最近看到了关于琐碎属性的光,所以也许现在我可以帮助你做同样的事情。 最后让我信服的是一个相当明显的观点(回顾起来),即.NET中的属性只是getter和setter方法的语法糖,而这些方法具有 别名 从物业本身。同一程序集中的代码仍然可以工作,因为无论如何您都必须同时重新编译它。但是在不同程序集中链接到您的代码 失败 如果您将字段重构为属性,除非它同时根据新版本重新编译。如果这是一个从一开始的财产,一切仍然是好的。 |
4
10
其中一个想法是,这些属性在将来可能并不琐碎——如果您将外部代码绑定到某个字段,然后希望将其包装到某个属性中,则所有依赖代码都必须更改,并且您可能无法这样做,特别是在您是控件设计器或具有无法控制的库的情况下,等等。 更不用说,有些.NET实践不允许您特别使用字段-数据绑定。 我相信还有其他的好理由。为什么这对你很重要?使用自动属性并完成它。我觉得有些事情不值得担心… |
5
10
我将用另一个问题回答你的问题:你是否真的受益于不公开你所有的类型和成员?我怀疑这样做并没有直接阻止任何错误。但是,我已经正确地封装了类型,只公开了要公开的内容。性能相似-良好的设计比其他任何东西都重要。我认为属性在概念上不同于字段;它们是合同的一部分,而不是实现的基本部分。将它们看作属性而不是字段有助于我更清楚地思考我的设计,从而得到更好的代码。 噢,我偶尔也从不破坏源代码兼容性、能够设置断点、日志访问等方面受益。 |
6
3
如果字段被属性访问器包装,那么调试涉及该字段的问题就容易得多。在访问器中放置断点可以很快帮助查找可重入性和其他可能无法捕获的问题。通过通过访问器对字段的所有访问进行编组,您可以确切地确定是谁在更改什么以及何时更改。 |
7
2
在.NET中,据我所知,您不能将数据绑定到公共字段,而只能绑定到属性。因此,如果您想进行数据绑定,就没有选择。 |
8
1
我曾经有过一些字段,我想从一个允许程序统计(totalitems和successfulitems)的项目窗口中公开这些字段。 后来,我决定在窗体上显示统计信息,并能够在setter中添加一个调用,该调用在属性更改时更新了显示。 |
9
1
显然,如果您没有创建共享类库,并且没有使用数据绑定,那么使用字段将不会导致任何问题。 但是,如果您要创建一个共享类库,那么imho除了遵循指导原则之外,还做其他事情是愚蠢的,原因通常有三个:
|
10
0
我不知道有什么东西像人们所说的那样微不足道。通过数据绑定之类的工作方式,微软暗示,作为对象公共接口一部分的任何数据位都应该是一个属性。我不认为它们仅仅意味着它是一种约定,就像在其他一些语言中一样,属性语法更多的是关于约定和便利性。 一个更有趣的问题可能是:“什么时候我应该使用公共领域而不是财产”,或者“什么时候公共领域而不是公共财产拯救了你的培根?” |
11
0
结构类型的字段允许直接访问其成员,而此类类型的属性则不允许。因此,如果
如果它总是可以
简言之,我假定,在不需要重新编译任何使用者的情况下,如果人们不关心能够交换不同版本的代码,那么使用属性而不是字段的最大效果是防止代码使用者编写代码,从而利用(并依赖)公开域的语义。属于结构类型的DS。
顺便说一下,公开结构类型的字段的另一种方法是公开
要添加局部变量的代码
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |