在Visual Basic中,用户自定义数据类型(Type在VB6或Structure在VB.NET中)允许您定义自己的复合类型,包括多个不同类型的变量。这对于打包相关数据非常方便。
UDTs (VB6):
Type Person Name As String Age As Integer Height As Single End Type Dim employee As Person employee.Name = "Алексей" employee.Age = 32 employee.Height = 1.85
Structures (VB.NET):
Structure Person Public Name As String Public Age As Integer Public Height As Single End Structure Dim employee As Person employee.Name = "Алексей"
何时使用:
相对而言: 当需要封装逻辑、继承、多态或实现接口时,使用类。
为什么在VB.NET中无法将结构赋值为
Nothing?
答案: 只有类的变量(对象)可以被赋值为Nothing,因为它们存储的是引用。结构体是值类型,它们始终包含值的集合;尝试赋值为Nothing将导致编译错误。
Dim s As Person = Nothing '错误!结构体不能为Nothing(除非是Nullable(Of T))
故事
在一个旧项目中,决定用具有多个字段的结构替换原始的原始数组,但新代码意外变得更慢。结果发现:该结构体的大小非常大,并且在函数中频繁复制。如果使用类,则只会复制引用,而不是整个结构体。
故事
将VB6-UDT迁移到VB.NET时,其中一位开发人员未实现结构的
ISerializable接口以进行远程调用。导致被删除的对象无法序列化,这在进程间交互时导致故障。
故事
在一个几何处理模块中,结构体存储了对数组的引用(可变)。多个该结构体的实例导致意外效果,因为结构体内部的引用指向相同的数据数组 — 变更反映在所有副本上!