c#中结构与类的区别
如何选择结构还是类
一.类与结构的示例比较:
结构示例:
public struct Person
{
string Name;
int height;
int weight
public bool overWeight()
{
//implement something
}
}
类示例:
public class TestTime
{
int hours;
int minutes;
int seconds;
public void passtime()
{
//implementation of behavior
}
}
调用过程:
public class Test
{
public static ovid Main
{
Person Myperson=new Person //声明结构
TestTime Mytime=New TestTime //声明类
}
}
从上面的例子中我们可以看到,类的声明和结构的声明非常类似,只是限定符后面是 struct 还是 class 的区别,而且使用时,定义新的结构和定义新的类的方法也非常类似。那么类和结构的具体区别是什么呢?
二 .类与结构的差别
1.值类型与引用类型
结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型
类是引用类型:引用类型在堆上分配地址
堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑
因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用
注:
1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object
2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用
2.继承性
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .
类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承
注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样
例如:结构实现接口
interface IImage
{
void Paint();
}
struct Picture : IImage
{
public void Paint()
{
// painting code goes here
}
private int x, y, z; // other struct members
}
3.内部结构:
结构:
没有默认的构造函数,但是可以添加构造函数
没有析构函数
没有 abstract 和 sealed(因为不能继承)
不能有protected 修饰符
可以不使用new 初始化
在结构中初始化实例字段是错误的
类:
有默认的构造函数
有析构函数
可以使用 abstract 和 sealed
有protected 修饰符
必须使用new 初始化
三.如何选择结构还是类
讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:
1.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2.结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3.在表现抽象和多级别的对象层次时,类是最好的选择
4.大多数情况下该类型只是一些数据时,结构时最佳的选择
相关文章:
Samba amp; Nginx - Resource temporarily unavailable
先说说本人的开发环境:Win7 Editplus VMware(CentosSambaNginx)。用Samba在Centos上把web文件夹(如www)共享,然后在Win7上訪问这个文件夹。之所以这么用的原因有: 习惯了Windows。效率比較高Editplus编辑器好用,相对于vi系列来说…

好多Javascript日期选择器呀-7
the Coolest DHTML Calendar 最特別的在於按下月份跟年份的加減按鈕不放,就可以選擇該項目。但實際上按著左鍵拖曳實在是一件很累的事,而且不懂電腦的 End-user 根本就不知道要按著不放,還得特地花時間去說明真的吃力不討好。 正好這次的專案…

话AI、学实践、探未来,亚马逊云科技AI在线大会报名开启!
Innovate 2021亚马逊云科技 AI 在线大会即将在 4 月 22 日举办。届时,亚马逊云科技大中华区产品部总经理顾凡,以及亚马逊云科技全球人工智能技术副总裁、杰出科学家Alex Smola将联袂为您献上精彩的主题演讲。大会开设六大分会场,可谓是别开生…

linux中的一些命令的想法
用户影子文件 ----shadow为什么要有影子文件因为Linux使用不可逆的加密算法来加密口令。加密算法不可逆的,因此***从密文处得不到明文,但/etc/passwd文件是全局可读的,而且加密算法是公开的,一旦用户有机会获取了/etc/passwd文件&…

vstpd服务
1、安装ftpyum install vsftpd -y systemctl start vsftpd systemctl stop firewalld systemctl enable vsftpd setenforce 0 #关闭selinux或者设置selinux不然会对试验造成影响 lftp ip ##能登陆并且显示,表示安装成功2、vsftpd文件信息/var/ftp …

LINQ to XML 建立,读取,增,删,改
LINQ to XML的出现使得我们再也不需要使用XMLDocument这样复杂的一个个的没有层次感的添加和删除。LINQ可以使的生成的XML文档在内存中错落有致。下面以一个小的例子说名LINQ to XML的简单应用。 需要添加必要的引用。System.XML.Linq , System.XML.Xpath使用XDocument 建立一个…

好多Javascript日期选择器呀-6
<script languagejavascript>var DS_x,DS_y; function dateSelector() //构造dateSelector对象,用来实现一个日历形式的日期输入框。{ var myDatenew Date(); this.yearmyDate.getFullYear(); //定义year属性,年份,默认值为当前系…

市值达 58 亿美元,吴恩达的在线教育平台 Coursera 正式上市
整理 | 寇雪芹出品 | AI科技大本营(ID:rgznai100)4 月 1 日,教育科技公司 Coursera 在纽约证券交易所上市,股票代码为 COUR。该股开盘价定为 39 美元 / 股,截至上市当日收盘,股价上涨至 45 美元 / 股&#…

软件包管理RPM
RPM 程序包管理器,可实现对程序包的安装、更新、查询和卸载操作,应用广泛下面通过实际操作来更好的理解RPM的功能安装程序:-i //安装数据包参数-v //显示安装过程-vv //显示更详细的安装信息-h //配合-v更加直观的显示程序安装过程&#…

好多Javascript日期选择器呀-4
<Script LANGUAGE"JavaScript"> var months new Array("一", "二", "三","四", "五", "六", "七", "八", "九","十", "十一", "十二&q…

SUBSTRING函數用法
---引用---從第二位開始,取三位 select SUBSTRING([價格條件],2,3) FROM [Ame_FSC_SEBGCelERP].[dbo].[物料採購價格信息表] SELECT * FROM [Ame_FSC_SEBGCelERP].[dbo].[物料採購價格信息表] update [Ame_FSC_SEBGCelERP].[dbo].[物料採購價格信息表] set [價格條件]SUBSTRI…

英特尔发布智慧社区解决方案,全栈技术支撑,涵盖五大战略方向
疫情的发生加速了城市智能化治理进程,而智慧社区作为其中的重要组成部分,在AI、大数据等技术的助力下,健康防疫追踪、应急管理等需求和应用也因此得到快速发展。 一般来说,打造智慧社区主要有两大目标,一方面…

OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量
关于 数学 的分支 - 线性变化量、离散量、随机量太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句:太阳火神的漂亮人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Androi…

好多Javascript日期选择器呀-5
<HTML> <HEAD> <TITLE>最精致的日历式日期输入控件 (Smart Ver 1.00)</TITLE> </HEAD> <style> body {font-size:12px;font-family:"Tahoma"; } td {font-size:12px;font-family:"Tahoma"; } .inputdate {border:1px…

清明出游,你会“鸽”酒店吗?AI 早已看穿一切
来源 | Hyper超神经作者 | 神经小兮头图 | 下载于视觉中国如今,大数据已经被各行各业所应用,酒店行业也不例外。充分利用大数据,使得酒店能够预测市场需求变化,进行智能化决策分析,改善经营状况。各大 OTA(…

ti的硬件时钟和系统时钟同步
1.hwclock -w软到硬 hwclock -s硬到软2. 通过ntp网络时钟控制同步3.etc下的localtime文件和GMT-8转载于:https://www.cnblogs.com/pengkunfan/p/3515517.html

来看看BAT在AR领域的布局,你给打几分?
所谓的AR(增强现实),就是把真实信息和虚拟世界叠加,并使两者具有交互性。换句话说,AR技术不仅让虚拟对象融入到现实世界中,用户还可以对现实世界做出响应。这是一种共生(symbiont)技术,机器与用户的共生。 而当Pokemon…

解决vim没有颜色的办法
首先打开vim,输入命令 scriptnames看看vim加载了哪些脚本。 :scriptnames 输出入下 1: /home/users/xxx/.vimrc2: /home/users/xxx/tools/share/vim/vim73/colors/darkblue.vim3: /home/users/xxx/tools/share/vim/vim73/syntax/syntax.vim4: /home/users/xxx/tools…

好多Javascript日期选择器呀--1
<script languagejavascript>var DS_x,DS_y; function dateSelector() //构造dateSelector对象,用来实现一个日历形式的日期输入框。{ var myDatenew Date(); this.yearmyDate.getFullYear(); //定义year属性,年份,默认值为当前系…

扶贫干部拍胸脯认证,AI开发者上手零门槛,百度打造 “云智一体”全栈开发杀手锏...
“我可以拍着胸脯说识别准确率很高。”扶贫干部刘乐这样评价他在使用百度EasyDL平台助力扶贫的效果,他是陕西省汉中市扶贫信息中心副主任,也是一名热爱编程的程序员。 在近期百度智能云举办的2021云智技术论坛首场活动上,刘乐介绍,…

CSS3 新特性
CSS3 是最新的 CSS 标准,并且完全向后兼容,不过目前W3C 仍然在对 CSS3 规范进行开发,虽然标准的规范还没有正式发布,但是现代浏览器已经支持相当多的 CSS3 属性了。CSS3 提供了很多可以把玩的新特性,模糊了之前只控制样…

在.net中使用GDI+来提高gif图片的保存画质
//本文章有www.blue1000.com翻译,原文地址http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx //尊重他人劳动成果,转载请注明出处。 写程序的时候经常用到gdi,他可以将一幅深色32 bpp图像保存为一个gif文件&…

随记:kickstart远程批量无人值守安装linux
环境:RHEL6.2组件:dhcp tftp vsftp kickstart原理:需安装linux的客户机通过PXE方式启动;通过dhcp取得IP地址;通过TFTP下载引导进程文件pxelinux.0,内核文件vmlinuz,底层驱动initrd.img&…

第五届全国大学生计算机系统能力培养大赛 | 赠书
全国大学生计算机系统能力培养大赛是由教育部高等学校计算机类专业教学指导委员会和系统能力培养研究专家组共同发起,以学科竞赛推动专业建设和计算机领域创新人才培养体系改革、培育我国高端芯片及核心系统的技术突破与产业化后备人才为目标,面向高校大…

玉山银行的一名新员工“玉山小i随身金融顾问”
市场竞争、监管变化、客户体验一直在对金融行业发起挑战,所以无论监管、竞争、客户都会影响金融行业在成本和服务上的创新,金融行业越来越多的开始利用人工智能去满足现有发展提出的要求。 台湾玉山银行的数字化转型就是一个很好的例子。台湾有一句顺口溜…

DataGridView 密码列(显示为*号)的设置
曾经为在DataGridView中设置密码列(显示为*号)而发愁,如何把Windows 窗体 DataGridView 的某一列的数据显示为“*”。 哈哈,今天终于搞定了。需要在DataGridView的2个事件中写代码真麻烦!下面的代码把第4列设置为密码…

在Android中进行单元测试遇到的问题
问题1、Cannot connect to VM socket closed 在使用JUnit进行测试的时候,遇到这个问题。网上的解释是:使用Eclipse对Java代码进行调试,无论是远程JVM还是本地JVM都会进行Socket通讯.发生这样的错误是由于这些软件会修改winsock,还会监听和占用一些端口&…

英特尔第三代 Ice Lake 发布正面与 AMD EPYC PK,结果令人大跌眼镜!
作者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导读:传闻已久的第三代英特尔至强可扩展处理器,终于在北京风光最美的4月份发布了。 北京时间4月7日晚,在著名的网红打卡地,百年老首钢工厂遗留下的工业建筑…

荣之联“云桥OneBridge”让IT运维事半功倍
近日,荣之联发布“云桥OneBridge”新一代的轻量级企业用户账号管理平台,为企业提供账号全生命周期管理解决方案。“云桥OneBridge”让IT运维工作效率大幅提升,并降低人为差错率,IT运维从此事半功倍。 据介绍,北京荣之联…

自定义GridView分页模板
GridView较之DataGrid提供了更加强大、更加完善的功能,而且具备了丰富的可扩展功能,可以使用GridView提供的pagertemplate自定义分页模板: 事实上,GridView默认的几中分页样式,都是将相关按钮的CommandName设为Page&a…