从结构变为类是否安全

时间:2015-02-16 14:02:40

标签: .net vb.net

我们有一种在整个应用中广泛使用的结构(超过一百次)。结构变得过于复杂,我正在考虑将其改造成课堂。

从结构迁移到类是否安全?

这只是关于存储对象的位置(堆栈或堆)还是应用程序行为可能被破坏?

2 个答案:

答案 0 :(得分:5)

  

这只是关于存储对象的位置(堆栈或堆)还是   应用程序行为可能会被打破?

这是一个问题。一个更重要的问题应该是值类型和引用类型之间的语义差异。您是否希望在指定对象的值时分配此对象的副本或引用的副本(指向堆中的对象)? 这可能是个大问题。我为什么这么说?无论你传递什么对象,如果你把它作为一个类,你将传递一个引用,并且对至少一个的字段所做的任何更改都会反映到你传递的对象上,而不是您传递的对象的副本。这可能是一个问题。但是,为了给出具体的答案,您必须运行代码库并彻底查看对象的使用方式。只有在这样做之后,你才能给出正确答案。

答案 1 :(得分:4)

这取决于结构是否实际实现为正确的值类型,或者它是否以伪装的方式实现。

如果它是一个正确的值类型,那么它将是不可变的(即实现为在创建时获取值,它不会改变),并且您可以用不可变类替换它而不改变行为

如果它是可变的,那么它本来应该是一个类。然而,制作一个课程会改变行为。

将结构分配给变量时,会复制结构中的数据,但是当您将类实例分配给变量时,只会复制对实例的引用。如果代码依赖于分配值创建副本的事实,那么您需要进行一些重写。