查看.NET代码,Rectangle.Size
返回new Size(Width, Height)
。为什么微软选择这种模式?就个人而言,我认为Size
将存储在结构中,例如,Rectangle.Width
将返回Size.Width
。这将阻止在每次属性调用时创建新结构。我猜测有一些不可变性的属性影响了这个决定,但我不确定是什么。
答案 0 :(得分:4)
Size
是一个结构体,所以它不像是在堆上创建一个新对象。无论你做什么,它都会创建Size
值的新副本。
说实话,我无法看出它会产生很大的不同。鉴于Width
的{{1}}和Height
属性已内联,我可以看到,如您所建议的那样存储Size
会有很多惩罚......但是同样地,我可以看到Size
的构造函数是如此微不足道,以至于JIT很可能能够将Size
属性转换为几乎完全相同的本机代码。
所以我同意这是一个稍微奇怪的决定,但我不认为这会伤害到任何人。也许它使序列化更简单或类似。
答案 1 :(得分:0)
如果您始终获得实际尺寸的链接,则在更改时会产生副作用。如果您打算更改它们,则必须使用要操作的对象的属性或getter和setter。如果你想将它们用于其他东西(计算布局等),这是最合适的解决方案。