如果对类比较熟悉,先看看结构和类的异同点:

结构和类

Visual Basic .NET 统一了结构和类的语法,结果就是两个实体都支持大多数的相同功能。但是,在结构和类之间还有着重要的区别。

相同点

结构和类在以下方面相同:

  • 两者都属于“容器”类型,表示它们可以包含其他类型作为成员。
  • 两者都具有成员,成员可以包括构造函数、方法、属性、字段、常数、枚举、事件和事件处理程序。
  • 两者的成员都具有单独的可访问性。例如,一个成员可以声明为 Public,而另一个可以声明为 Private
  • 都可实现接口。
  • 都有共享的构造函数,有或没有参数。
  • 两者都可以公开默认属性,只要该属性至少带有一个参数。
  • 两者都可以声明和引发事件,而且两者都可以声明委托。

不同点

结构和类在以下方面有所不同:

  • 结构是值类型,而类是引用类型。
  • 结构使用堆栈分配,类使用堆分配。
  • 所有的结构成员都默认为 Public;类变量和常量默认为 Private,而其他的类成员默认为 Public。类成员的这一行为提供与 Visual Basic 6.0 默认值系统的兼容。
  • 结构必须至少具有一个非共享变量或事件成员;而类可以完全是空的。
  • 结构成员不能声明为 Protected,类成员可以。
  • 只有 Shared Sub 结构过程才能处理事件,并且只能使用 AddHandler 语句;而任何类过程都可以处理事件,并且可以使用 Handles 关键字或 AddHandler 语句。
  • 结构变量声明不能指定初始值、New 关键字或数组初始大小,类变量声明可以。
  • 结构从 ValueType 类隐式继承,不能从其他类型继承,类可以从除 ValueType 之外的其他任何类继承。
  • 结构是不可继承的;而类可以继承。
  • 结构从不终止,所以公共语言运行库 (CLR) 从不在任何结构上调用 Finalize 方法,类可由垃圾回收器终止,当检测到没有剩下的活动引用时,垃圾回收器将在类上调用 Finalize
  • 结构不需要构造函数;而类需要。
  • 结构仅当没有参数时可以有非共享的构造函数;类无论有没有参数都可以。

每一个结构都有不带参数的隐式公共构造函数。此构造函数将结构的所有数据成员初始化为默认值。不能重定义此行为。

实例和变量

由于结构是值类型,每个结构变量都永久地绑定到一个单独的结构实例。但类是引用类型,对象变量可引用各种类实例。此区别在下列方面影响结构和类的使用:

  • 结构变量使用结构的无参数构造函数隐式包含成员初始化。因此,Dim S As Struct1 等效于 Dim S As Struct1 = New Struct1()
  • 当将一个结构变量赋给另一个,或传递一个结构实例到过程参数,所有变量成员的当前值都被复制到新结构中。当将一个对象变量赋给另一个,或传递一个对象变量到过程,仅有引用指针被复制。
  • 可以将值 Nothing 赋给结构变量,但实例继续保持与变量的关联。尽管赋值重新初始化了变量成员,仍可以调用其方法并访问其数据成员。相比之下,如果将对象变量设为 Nothing,将其与任何类实例断开关联,在给它赋予另一个实例前,不能通过变量访问其他成员。
  • 对象变量可以有在不同时间赋给它的不同的类实例,几个对象变量可以同时引用同一个类实例。当通过指向同一实例的另一个变量访问时,更改的类成员的值会影响这些成员。但是,结构成员独立存在于其自身实例中。更改其值不会在其他任何结构变量中反映出来,即使是在同一 Structure 声明的其他实例中。
  • 两个结构的等效性测试必须在成员对成员的测试中进行。两个对象变量可使用 Equals 方法进行比较。Equals 指示两个变量是否指向同一实例。

Structure 语句

Structure 语句只能在模块、命名空间或文件级出现。这就是说可以在源文件或模块、接口或类内部声明结构,但不能在过程内部进行声明。也可以在一个结构中定义另一个结构,但不能通过外部结构访问内部结构的成员。而是必须声明一个内部结构的数据类型变量。

可以从声明结构的模块或类内的任何位置访问它们。默认情况下,结构为 Friend。若要更详细地指定可访问性,请在 Structure 语句中包括 PublicFriendProtected FriendPrivate

必须声明结构的每一数据成员。这意味着 variabledeclarations 部分中的每一语句必须使用 DimFriendPrivatePublic。由于无法从结构中继承,因此结构成员不能是 ProtectedProtected Friend。但结构本身可以是 ProtectedProtected Friend

如果 Option StrictOn,则在每一个成员声明中还必须包含 As 子句。用 Dim 声明的成员默认为 Public 访问,未用 As 子句声明的成员默认为 Object 数据类型。

在结构中必须至少定义一个非共享变量或事件。在结构中不能只包含常数、属性和过程,即使某些成员是非共享的。

结构成员的范围是整个结构。

不能将结构的任何数据成员的值初始化成其声明的一部分。必须通过结构上参数化的构造函数初始化数据成员,或者在创建了该结构的实例后将值赋给该成员。

结构支持的许多功能与类支持的一样。例如,结构可以拥有属性和方法,可以实现接口,也可以拥有参数化的构造函数。但是,在某些地方(例如继承、声明和用法)结构和类之间存在着重大的差异。

(以上资料来自MSDN)

?

结构 Structure相关推荐

  1. ECCV / TNNLS 20 - 如何在异常检测中利用“结构structure - 纹理texture”一致性【P-Net,MemSTC-Net】

    文章目录 前言 P-Net MEMSTC-Net 总结 前言 不管是医学图像还是工业图像领域,异常检测都是非常重要的一个研究方向(在训练时只有正常样本,测试时需要模型判断输入样本是否存在异常).存在一 ...

  2. GCSE英语语言考试-语言和结构

    Language语言 Example of a simile from The Hunger Games, Suzanne Collins <饥饿游戏>中的比喻例子,苏珊娜-柯林斯的作品 ...

  3. 《数字图像处理》学习总结及感悟:第二章数字图像基础(1)人眼结构、感知和错觉

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░ 一.引言 本系列文章记录老猿自学冈萨雷斯<数字图像处理>的感悟和总结,不过 ...

  4. 《C程序设计语言》笔记 第6章 结构

    结构(structure)是一个或多个变量的集合,这些变量可能是不同的类型,为了方便处理而组织在一个名字之下.由于结构将一组相关的变量看作一个单元而不是各自独立的实体,因此结构有助于组织复杂的数据,特 ...

  5. 理解表现和结构相分离

    对于初学者,我们常看见web标准的好处之一是"能做到表现和结构相分离",那这到底是什么意思呢?我将以一个实际的例子来详细说明.首先我们必须先明白一些基本的概念:内容.结构.表现和行 ...

  6. 复杂的数据类型(结构)

    对象的基础-结构 结构( Structure)是一种由程序员定义的.由其他变量类型组合而成的数据类型. 定义一个结构的基本语法是 struct name {type varname1;type var ...

  7. 计算机组织与结构课程笔记

    计算机组织与结构个人总结 计组第一章 计算机体系结构architecture是指那些对程序员可见的系统属性,是直接影响程序的逻辑执行 计算机组成organization是实现结构规范的操作单元 及其相 ...

  8. 江哥带你玩转C语言 | 14 - 结构体-枚举-共用体

    什么是结构体 结构体和数组一样属于构造类型 数组是用于保存一组相同类型数据的, 而结构体是用于保存一组不同类型数组的 例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为 ...

  9. Graph Representation 图神经网络

    Graph Representation 图神经网络 图表示学习(representation learning)--图神经网络框架,主要涉及PyG.DGL.Euler.NeuGraph和AliGra ...

最新文章

  1. 百度云api android,帮助文档首页/百度移动统计API/百度移动统计 Android版SDK - 百度开放云平台...
  2. 计算机学院 图论方向,成电计算机学院本科生在计算机科学理论方向重要国际会议SAT上发表论文...
  3. mysql 分组 字符串_MySQL查询以字符串字段中的数字字符对行进行分组?
  4. 智能机器人领域有什么好书推荐的?
  5. mycli到底有多好用?
  6. 关于python中self
  7. 程序员过关斩将——搞定秒杀,只需要这几步!!
  8. [转载] Python print输出不换行没空格
  9. 虚拟机服务器做ghost,图文教程:利用VMware虚拟机一步一步学着做GHOSTX——转自无约而来...
  10. 3分钟就能完成的Redis主从复制搭建
  11. 阿里云等企业主导的龙蜥社区发起“龙腾计划”;OpenInfra 基金会推出 LOKI 标准;GitLab 14.6 发布 | 开源日报
  12. html设置图片为部分背景颜色,设置HTML的一个部分作为一个不同的背景颜色
  13. android手机如何截屏快捷键,手机截屏怎么弄,手把手教你手机截图方法
  14. 设CPU共有16根地址线,8根数据线,并用MREQ (低电平有效) .作访存控制信号,R/W作读写命令信号(高电平为读,,低电平为写)。
  15. 解决Gradle‘s dependency cache may be corrupt (this sometimes occurs after a network connection timeout
  16. 洛谷P1205JAVA题解
  17. Obi - Advanced Rope Simulation 绳索插件学习文档
  18. EFR32BG22 Thunderboard Kit 学习笔记总结
  19. 液晶监控屏:大屏领域已占据主导地位
  20. 网络io和磁盘io_在磁盘IO上,第1部分:IO的风味

热门文章

  1. 黑鱼资源完整模板分享 已本地化CSS JS
  2. GcRoot可以有哪些?
  3. 吹风机用了都说好的戴森,在干手器里也有秘密武器
  4. android 获得后退键按事件
  5. 中国股神透露独特选股思路
  6. GMT pscoast
  7. Flash新手教程:打造拟真生态水族鱼缸-添加动画效果
  8. 中兴财务新云陈虎:财务应从最小数据集转为大数据 洞察五新商机
  9. 【通俗易懂的通信】马尔可夫过程Ⅱ:马尔可夫链中的状态,常返、非常返
  10. 一次脑残的记录: Linux 中实时任务调度与优先级