首页
网页制作
网络编程
脚本专栏
数据库
网站运营
网络安全
平面设计
CMS教程
搜索
建站极客
软件编程
C#教程
正文
深入c# 类和结构的区别总结详解
所属分类:
软件编程
/
C#教程
阅读数: 44
收藏 0
赞 0
分享
类和结构的区别:
1.一个是引用类型一个是值类型
Class是引用类型,继承自System.Object类
Struct是值类型,继承自System.ValueType类,因此不具有多态性
因为结构是值类型,所以结构之间赋值可以创建新的结构,复制包含结构的变量时,讲复制所有的数据,对新的副本所作的修改都不会改变旧副本的数据,而类是引用类型,类之间的赋值只是复制引用。
2. 继承性的区别
Class支持继承,可以继承自类和接口,是完全可扩展的,除非声明sealed。否则类可以继承自其它的类的接口,自身也能被继承。
Struct没有继承性,不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确地用sealed声明,但是结构师隐式的sealed。Struct支持接口继承。
3.内部结构:
结构
类
没有默认的(无参数)构造函数,但是可以添加构造函数,结构可以声明构造函数,但是他们必须是带参数的。
有默认的构造函数
没有析构函数
有析构函数
没有abstract和sealed(因为不能继承)
可以使用abstract和sealed
不能有protected修饰符,不可以声明protected,virtual,sealed和override成员
可以声明protected,virtual,sealed,override成员
可以不使用new初始化
必须使用new初始化,struct在声明时就进行了初始化过程,所有的成员变量均默认为0或null
在结构中初始化实例字段是错误的
Struct变量使用完之后就自动解除内存分配
Class实例有垃圾回收机制来保证内存的回收处理
Struct创建的对象复制简单,直接以等号连接即可
Class对象复制分为浅复制和深复制,必须经过特别的方法来完成复制
我们可以简单地理解为class是一个可以动的机器,有行为,有多台,有继承,而struct是一个零件箱,组合了不同结构的零件,其实class和struct最本质的区别在于class是引用类型,内存分配在托管堆,而struct是值类型,内存分配在线程堆栈上,此差异导致了上述的所有的不同。
4.如何选择类和结构
(1)实现一个主要勇于存储数据的结构时,可以考虑结构
(2)Struct变量占用堆栈的空间,因此适用于数据量相对小的场合,堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些。
(3)结构数组具有更高的效率
(4)结构表示如点,矩形和颜色这样轻量的对象,例如,如果声明一个含有1000个点的对象数组,则将为引用每个对象分配附加的内存,在此情况下,结构的成本较低。
(5)在表现抽象和多级别的对象层次时,类是最好的选择
(6)在大多数情况下,该类型只是一些数据时,结构师最佳的选择。
更多精彩内容
其他人还在看
C#基础:Dispose()、Close()、Finalize()的区别详解
本篇文章是对c#中的Dispose()、Close()、Finalize()的区别进行了详细的分析介绍,需要的朋友参考下
评论 0
收藏 0
赞 0
分享
C#字符串常见操作总结详解
本篇文章是对C#中字符串的常见操作进行了详细的总结介绍,需要的朋友参考下
评论 0
收藏 0
赞 0
分享
c# 引用类型与值类型的区别详解
本篇文章是对c#中引用类型与值类型的区别进行了详细的分析介绍,需要的朋友参考下
评论 0
收藏 0
赞 0
分享
c# 实现IComparable、IComparer接口、Comparer类的详解
本篇文章是对c#中实现IComparable、IComparer接口、Comparer类进行了详细的分析详解,需要的朋友参考下
评论 0
收藏 0
赞 0
分享
深入c# 类和结构的区别总结详解
本篇文章是对c#中类和结构的区别进行了详细的分析介绍,需要的朋友参考下
评论 0
收藏 0
赞 0
分享
解析C#自定义控件的制作与使用实例的详解
本篇文章是对C#中自定义控件的制作与使用实例进行了详细的分析介绍,需要的朋友参考下
评论 0
收藏 0
赞 0
分享
C#实现路由器断开连接,更改公网ip的实例代码
C#实现路由器断开连接,更改公网ip的实例代码,需要的朋友可以参考一下
评论 0
收藏 0
赞 0
分享
C#中使用IrisSkin2.dll美化WinForm程序界面的方法
这篇文章主要介绍了c#中使用IrisSkin2.dll美化WinForm程序界面的实现方法,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
.net C# 实现任意List的笛卡尔乘积算法代码
笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。
评论 0
收藏 0
赞 0
分享
C#中实现任意List的全组合算法代码
这篇文章主要是介绍了.net C# 实现任意List的全组合算法实现代码,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
查看更多
网络赚钱
更多
调查:55.2%受访用户不会相信朋友圈打广告的化妆品
google
sp项目教程:最新日赚500元教程
光大银行网上银行西联汇款收汇方法分享
2021年后通过网络、自媒体赚钱的几种方法
SEO中到底是流量重要还是转化率重要
站长故事
更多
木屋烧烤创始人自述:屌丝的逆袭开餐饮店 连锁餐饮成功的五个因素
30岁seo老鸟走过的路:从无知到精通需要时间和精力
一成不变的站长到底还能活多久?
站长从菜鸟到资深必经过程
草根站长告诉你通过互联网赚钱到底难不难(真实经历)
网站被K到恢复收录与排名我做了什么