新手跪求 关于vb.net结构与类的问题

doupeng 2004-03-31 05:53:23
小弟 才学 vb.net 关于vb.net中 结构与类的区别 不是很清楚 只知道 结构是值类型 不知到 它能 包含方法 吗/还有 他有构造函数吗/ 需要new 实例 化吗?
...全文
37 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LiJoe 2004-04-01
  • 打赏
  • 举报
回复
结构和类请参见
结构:您自己的数据类型 | 结构变量 | 结构和其他编程元素 | 值类型和引用类型 | 作为类和结构的数据类型 | Structure 语句 | 了解类 | ValueType 类 | AddHandler 和 RemoveHandler | Class 语句 | Object.Equals 方法
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 指示两个变量是否指向同一实例。
loveyzy 2004-03-31
  • 打赏
  • 举报
回复
对,Henry的文章非常好,非常到位,非常不错
Latitude 2004-03-31
  • 打赏
  • 举报
回复
http://www.csdn.net/develop/author/netauthor/Latitude/
看一下《Henry的VB.NET之旅(四)—类和结构》

---
by Henry
Ninputer 2004-03-31
  • 打赏
  • 举报
回复
类有时也不可继承,所以这不是本质区别。两者都可以实现接口
loveyzy 2004-03-31
  • 打赏
  • 举报
回复
类可继承,而结构不可继承
Ninputer 2004-03-31
  • 打赏
  • 举报
回复
结构体是值类型,在堆栈中创建,无需使用New
Dim i As Int32 '结构体

类是引用类型,在堆中创建,引用型类型的变量只是一个引用,需要用New
Dim e As New EventArgs '类

结构体和类都能包括方法。但结构体只能包含有参数的构造函数。
thinkingforever 2004-03-31
  • 打赏
  • 举报
回复
有构造函数

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧