结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的

C#结构体和类的区别问题

这两种数据类型的本质区别主要是各自指向的内存位置不同。传递类的时候,主要表现为是否同时改变了源对象。

1.结构体是值类型,类是引用类型

虽然结构体的初始化也使用了new操作符,可是结构体对象依然分配在堆栈上而不是堆上

类在传递的时候,传递的内容是位于托管内存中的位置,结构体在传递的时候,传递的内容是位于程序堆栈区的内容。当类的传递对象修改时,将同时修改源对象,而结构体的传递对象修改时,不会对源对象产生影响。

堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑 
因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用

注: 
  a.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object 
  b.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用

2.结构体不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed

类完全可扩展的,除非显示的声明sealed   否则类可以继承其他类和接口,自身也能被继承

虽然结构不能被继承,可是结构能够继承接口,方法和类继承接口一样

3.结构:不能包含显式默认构造函数;没有析构函数,没有abstract和sealed(因为不能继承);不能有protected修饰符,可以不使用new初始化

在结构中初始化实例字段是错误的

类: 有默认的构造函数,有析构函数,可以使用abstract和sealed,有protected修饰符,必须使用new初始化。

如何选择用结构还是类 

讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类: 
1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些 
2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。 
3. 在表现抽象和多级别的对象层次时,类是最好的选择
4. 大多数情况下该类型只是一些数据时,结构时最佳的选择

作者:耑新新,发布于  博客园

转载请注明出处,欢迎邮件交流:zhuanxinxin@foxmail.com

转载于:https://www.cnblogs.com/Amedeo/p/5738458.html

C#中结构体和类的区别相关推荐

  1. C++中结构体与类的区别介绍

    在参与以C++为编程基础的项目应用中总会遇到结构体类型与类的数据类型,但是其具体应用区别模糊不清 现将其区别总结如下,欢迎补充共同学习(先介绍C和C++中结构体的不同,再对比C++中结构体与类的区别) ...

  2. swift string转int_swift中结构体和类的区别(值类型和引用类型的区别)

    在swift中结构体和类有着更多的相同之处,在一般的使用中能够做到互相替换.我们可以先看看官方文档的描述: Unlike other programming languages, Swift does ...

  3. C/C++中结构体和类的区别

    结构体是为能够保存不同类型的数据而存在的,因为数组朱能够保存一种数据类型,而在平时的编程中我们需要用到不同数据类型的一个整体结构,例如一个学生就有不同的属性,姓名,年龄,学号,性别等等,就需要用不同的 ...

  4. C语言结构体与C++中结构体和类的区别

    在C++中除了类中可以有构造函数和析构函数外,结构体中也可以包含构造函数和析构函数,这是因为结构体和类基本雷同,唯一区别是,类中成员变量默认为私有,而结构体中则为公有.注意,C++中的结构体是可以有析 ...

  5. 【知识积累】C#中结构体和类的区别

    [类]     类是对现实生活中一类具有共同特征的事物的抽象.类的实质是一种数据类型,类似于int.char等基本类型,不同的是它是一种复杂的数据类型.因为它的本质是类型,而不是数据,所以不存在于内存 ...

  6. C++中结构体和类的区别和联系

    最主要的不同点就是结构体的访问权限为public而且不能改变,而类的访问权限可以改变,public的类和结构体基本一样. 继承上同样表现出这样的特点,struct是public继承的,而class是p ...

  7. c++中 结构体和类的区别

    区别: 结构是一种用关键字struct声明的自定义数据类型.与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,结构是值类型. 1.结构的构造函数和类的构造函数不同 ...

  8. C++中结构体与类的区别(struct与class的区别)

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能! struct能继承吗? 能!! s ...

  9. c++中结构体和类的区别

    转载来源:原文 C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能! struct能继承 ...

最新文章

  1. 【笔记】 感受野与权值共享 摄像头标定 相机坐标与世界坐标
  2. vbs如何写进度条_VBS 调用 HTA 实现进度条加载
  3. ubuntu列出所有磁盘_列出Ubuntu上的磁盘空间使用情况
  4. 谓词筛选表达式的扩展库PredicateLib
  5. 41. 缺失的第一个正数 golang
  6. 利用Python解决豆瓣验证码,实现模拟登陆!
  7. SpringBoot实战教程(1)| 整合Swagger3.0.0
  8. Nginx 静态服务器
  9. paip.spring 获取bean getBean 没有beanid的情况下
  10. stdafx.h 简介及作用
  11. 华为交换机初始化和配置SSH和TELNET远程登录方法
  12. 【摩尔吧】Altium 17 OT6166全景行车记录仪六层高速PCB设计实战视频
  13. Win11右键显示更多选项设置教程
  14. IOS开发学习资料集合(开发必备)
  15. activitimq集群搭建_activemq集群的搭建
  16. 广东工业大学计算机专业分流,2017年广东工业大学大类招生学生专业分流工作小组...
  17. 六石管理学:突然看到两个男同事聊天,预判离职
  18. NLP学习——Word2vec
  19. java选中多张图片上传
  20. 图书管理系统java+Oracle

热门文章

  1. Windows使用telnet验证服务端口是否通
  2. Git 操作场景大全
  3. mysql隔离级别与锁的关系
  4. MSB8036 找不到 Windows SDK 版本10.0.18362.0。请安装所需的版本的 Windows SDK 或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SD
  5. haroopad编辑html,走进MARKDOWN的世界
  6. 拼多多开店一定要知道
  7. 提示以只读方式打开文件
  8. HJ97 记负均正(c++)
  9. ASR项目实战-后处理
  10. SpringMVC之实现文件上传与下载