纵观.NET代码,Rectangle.Size
返回new Size(Width, Height)
。为什么微软选择这种模式?就我个人而言,我会认为Size
将被存储在该结构中,并且例如Rectangle.Width
将返回Size.Width
。这将阻止每个属性调用创建新结构。我猜测有一些不变性质影响了这个决定,但我不确定是什么。为什么Rectangle.Size在每次调用时创建新的实例?
2
A
回答
4
Size
是一个结构,所以它不像它在堆上创建一个新的对象。无论你做什么,它都会创建一个新的Size
值。
说实话,我看不出这样做会有什么不同。考虑到和Height
属性Size
内联,我可以看到存储Size
不会有太多的代价,正如您所建议的那样...但同样我可以看到Size
的构造函数非常微不足道,以至于JIT可能以及能够将Rectangle.Size
属性转换为几乎完全相同的本机代码。
所以我同意这是一个略微奇怪的决定,但我不认为这会伤害任何人。也许它使序列化更简单或类似的东西。
0
如果您总是得到实际大小的链接,则在更改它们时会产生副作用。如果你的意图是改变它们,你必须使用你想要操作的对象的属性或getter和setter。如果你想用它来做其他事情(计算布局等),这是最合适的解决方案。
相关问题
- 1. 为什么在创建新实例时创建DUP
- 2. 在每次运行时都创建了BackgroundTasks的新实例吗?
- 3. 如何防止每次调用主机时创建类的新实例?
- 4. 为什么在Azure上创建新的VM实例时不显示D1V2实例?
- 5. 是否每次调用新的Handler(Looper.getMainLooper())创建它的新实例?
- 6. MediaBrowserServiceCompat实例每次运行时更改都会重新创建
- 7. 在每次迭代中创建Campaign的新实例
- 8. 为什么Android Studio每次创建新项目时都不会创建content_main.xml?
- 9. 为什么在wsHttpBinding中每次都创建新会话ID
- 10. 创建新实例的JLabel的每次点击
- 11. 为什么在创建System.Net.Http.HttpClient()的实例时收到NullReferenceException?
- 12. OpenCL在第一次函数调用时创建新线程,为什么?
- 13. `auto`每次都创建一个新的变量实例?
- 14. 运算符++(int x)是否每次都创建新的实例?
- 15. 每次android都通过Intent创建新的实例活动?
- 16. 在JavaScript中调用时创建新的“类”实例
- 17. 为什么我的update()方法创建一个新的实例?
- 18. 为什么创建新产品模型时会调用“更新”?
- 19. 每次调用方法时创建一个新的集合
- 20. 为什么可以创建一个COM接口的新实例?
- 21. 为什么在创建Intent实例时传递'this'?
- 22. 为什么在创建WMI实例时收到严重错误?
- 23. 为什么MooTools在创建Fx.Slide实例时删除边距?
- 24. ExecutorService - 在方法中创建新实例vs每个类创建一个实例
- 25. 为什么PersistentConnection(SignalR)为每个客户端实例化两次?
- 26. 在javascript中调用实例创建回调的实例方法
- 27. 为什么vim每次保存文件时都会创建一个新文件?
- 28. 为什么Python不调用实例方法__init __()创建实例,而是调用类提供的__init __()来代替?
- 29. NLog为类的每个实例创建新的日志文件
- 30. 在每次调用时实例化域模型DDD
问题是,现在每次调用Width或Height都会生成结构的副本。这个副本不能被抑制,许多具有Rectangle的类派生自MarshalByRefObject,这会阻止属性被内联。哪个属性最常用?很难说,但矩形方法本身从不使用大小。 –
@Hans - 每次调用为什么会生成新副本?不能每个矩形都有自己的内部大小结构? – dlras2
假设您有一个带有内部大小字段的矩形类型。现在想想如何实现宽度和高度属性获取器。 –