- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[c中结构和类的六点区别
C#结构和类的六点区别
引言 1
区别一:存储类型 3
堆和栈: 3
结构和类的存储类型: 3
区别二:继承性 4
区别三:初始化 5
区别四:构造函数 5
区别五:析构函数 7
区别六:关键字 7
类和结构的使用选择: 7
参考: 8
1、一览表: 8
2、结构和类的区别: 8
3、结构和类的异同: 8
4、源代码: 8
Struct,cs 8
Class.cs 10
Program.cs 13
引言
我们先来看一个例子:
例1:类和结构的基本定义
上面的两个图片一个定义的是类,另一个是结构的定义。从表面上来看,两中数据类型的定义基本没什么区别,类里面有的成员结构都能有,事实上也确实如此。在c#中,两者在本质上都属于数据结构,封装着一组整体作为一个逻辑单位的数据和行为。?数据和行为是该类或结构的“成员”,它们包含各自的方法、属性和事件等(本主题后面列出了这些内容)。结构和类有很大的相似性:
都是container类型,这表示它们可以包含其他数据类型作为成员。他们可以包含的内容基本相同:字段、构造函数、方法、属性、常量、事件、索引器、运算符、嵌套类型等;
成员都可以分为静态和非静态,成员的类型、访问方式可以互不相同;
方法(或称函数)都可以进行重载、复写等操作;
都派生于System.Object;
?结构定义函数和类中定义函数完全相同;
都能进行封装;
都能响应接口;
都可以通过泛型定义;
都可以声明和触发事件,而且两者都可以声明委托(Delegate);
方法或成员的调用方式、对象的初始化都相同;
默认情况下所有的字段、方法都是私有的
结构与类在语法上有着很大的相似,但是两者也存在着很明显的区别,具体表现在下面六个方面:
区别一:存储类型
堆和栈:
“栈”(stack)和“堆”(heap)这两个词来源于“运行时”(runtime)对内存进行组织的方式:
栈内存就像一系列堆叠越高的箱子。调用方法时,它的每个参数都被放入一个箱子,并将这个箱子放到栈的最顶部。每个局部变量也同样分配到一个箱子,并同样放到栈的最顶部。方法结束之后,方法的所有箱子都会从栈中移除。
堆内存则像散布在房间里的一大堆箱子,而不像栈那样,每个箱子都严格地叠置在另一个箱子上方。每个箱子都有一个标签,它标记了这个箱子是否正在使用。创建一个新对象时,“运行时”会查找一个空箱子,并把它分配给对象。对对象的引用则存储在栈上的一个局部变量中。“运行时”将跟踪每个箱子的引用数量(记住,两个变量可能引用同一个对象)。一旦最后一个引用消失,运行时就将箱子标记为“未使用”。将来某个时候,会清除箱子里的东西,使之能真正重用。
结构和类的存储类型:
结构是值类型数据,存储在栈(stack)中。结构进行数据复制的时候,是将原来数据进行备份。创建结构时,结构赋值到的变量保存该结构的实际数据。?将结构赋给新变量时,将复制该结构。?因此,新变量和原始变量包含同一数据的两个不同的副本。?对一个副本的更改不影响另一个副本。
如:对例1中定义的结构作如下操作:
// 使用结构
static void UseStruct()
{
Date labourDay = new Date(5, 1);
Date yaoMingBirth = labourDay;
labourDay.ReadDate();
yaoMingBirth.ReadDate();
yaoMingBirth.Change(1980, 11, 8);
labourDay.ReadDate();
yaoMingBirth.ReadDate();
}
显示结果:修改其中一个变量的值,不会影响和它同一个拷贝的另外一个变量。
类是引用类型数据,存储在堆(heap)中和栈(stack)中,堆中存储的是真实的数据,栈中存储的是数据在堆中的地址。就像是在仓库里面放苹果,我们把放苹果的箱子编号,再将编号记录在一个本子上面,这个本子就是栈,仓库就是堆。?
如:对例1中定义的类进行如下操作:
// 使用类
static void UseClass()
{
Birthday myBirth = new Birthday(1987, 6, 12);
Birthday liliBirth = myBirth;
myBirth.ReadDate();
您可能关注的文档
- [介绍四导四学教学模式标准.ppt
- [chinacloud论文合集.doc
- [CISCO2800参数介绍.docx
- [chp6图面要素的组织.doc
- [Chrome浏览器你不知道的五个实用技巧.doc
- [第五章第一节西气东输.ppt
- [第五章第三节关注癌症.ppt
- [Cisco7609.doc
- [cisco认证介绍.doc
- [CiscoCRS-1功能特点.docx
- 25上半年2期套题班-行政职业能力测验(八).docx
- 公考讲义-2025年1月时政汇总.pdf
- 2025年省考逻辑填空1000 高频实词积累+刷题早读课 讲义.pdf
- 25上半年2期套题班-行政职业能力测验(九).docx
- 2025四川事业编FB综合岗考试-综合能力测试讲义-主观题基础,案例分析题,公文写作及文章写作题.pdf
- 25上半年2期套题班-行政职业能力测验(五).docx
- 2025申论多省联考刷题课真题资料-2025国考执法课程.doc
- 2025申论多省联考刷题课真题资料-2024江西执法课程.doc
- 25上半年2期套题班-行政职业能力测验(十).docx
- 2025申论多省联考刷题课真题资料-2024福建县乡课程.doc
最近下载
- 《汽车构造图解》课件.pptx VIP
- 2022浙江高考英语读后续写模拟试题(含范文详解10篇)1.doc
- 搭钢棚合同协议书范本(2篇).docx
- 学校学生欺凌防治制度机制汇编(2025修订版).docx
- 基于任务驱动的小学语文写作教学探究.docx VIP
- 2024年配电线路工(高级)技能鉴定理论考试题库(含答案).pdf VIP
- 《医学影像检查技术学》课件——骶尾椎X线摄影.pptx VIP
- 2025重庆九洲隆瓴科技有限公司招聘软件技术员等岗位30人笔试备考试题及答案解析.docx
- 北京市海淀区2021-2022学年第一学期小学6年级英语期未试卷.pdf
- 11-傅建佳《活在课堂里》读书分享公开课教案教学设计课件资料.pptx VIP
文档评论(0)