C#中类(class)与结构(struct)的异同


Posted in 面试题 onNovember 03, 2013
1.值类型与引用类型
结构Struct是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型
类Class是引用类型:引用类型在堆上分配地址
堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑
因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用
1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object
2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用
2.继承性
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .
类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承
3.内部结构:
结构:
没有默认的构造函数,但是可以添加构造函数
没有析构函数
没有 abstract 和 sealed(因为不能继承)
不能有protected 修饰符
可以不使用new 初始化
在结构中初始化实例字段是错误的
类:
有默认的构造函数
有析构函数
可以使用 abstract 和 sealed
有protected 修饰符
必须使用new 初始化

Tags in this post...

面试题 相关文章推荐
方法名是否可以与构造器的名字相同
Jun 04 面试题
"火柴棍式"程序员面试题
Mar 16 面试题
static函数与普通函数有什么区别
Dec 25 面试题
面向对象概念面试题(.NET)
Nov 04 面试题
什么情况下你必须要把一个类定义为abstract的
Jan 06 面试题
Linux如何压缩可执行文件
Oct 21 面试题
linux面试题参考答案(10)
Nov 04 面试题
几道Web/Ajax的面试题
Nov 05 面试题
Java程序员常见面试题
Jul 16 面试题
Unix/Linux开发面试题
Aug 16 面试题
程序员经常用到的UNIX命令
Apr 13 面试题
四种会话跟踪技术
May 20 面试题
C#的几个面试问题
May 22 #面试题
C#可否对内存进行直接的操作
Feb 26 #面试题
C#中有没有静态构造函数,如果有是做什么用的?
Jun 04 #面试题
一套C#面试题
Oct 09 #面试题
在C#中如何实现多态
Jul 02 #面试题
使用C#编写创建一个线程的代码
Jan 22 #面试题
编程实现去掉XML的重复结点
May 28 #面试题
You might like
Protoss建筑一览
2020/03/14 星际争霸
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
应届生财务会计求职信
2013/11/05 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
2014年教师节活动总结
2014/08/29 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
入党转正申请报告
2015/05/15 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL