结构体和类的区别

区别有三:   
  1:   类可以继承,结构不可以.     2:   类是引用类型,结构是值类型     3:   类在堆中,结构在栈分配内存  

二   .类与结构的差别        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.大多数情况下该类型只是一些数据时,结构时最佳的选择 

转载于:https://www.cnblogs.com/iamdanger/p/3365522.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取android手机的屏幕分辨率 android开发

2019独角兽企业重金招聘Python工程师标准>>> /** * 获取屏幕分辨率 */ private void getResolution() { // TODO Auto-generated method stub Display display getWindowManager().getDefaultDisplay(); DisplayMetrics displayMetrics new DisplayMetrics(); dis…

Python线程指南 ---转自 http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html

Python线程指南 ---转自 http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html 本文介绍了Python对于线程的支持,包括“学会”多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例。 注意:本文基于Python2.4完成&#xff0c…

java接口开发 全局异常,全局异常处理

习惯在controller中进行try catch 异常处理了,但其实如果不做异常处理的话,也可以采取全局异常处理的方式进行解决,同样方便统一使用、维护,具体实现如下:import javax.servlet.http.HttpServletRequest;import javax.…

微信公众平台开发入门教程(三)消息类型讲解

接收消息类型 目前普通用户能向公众账号推送五种格式的消息&#xff1a;文本&#xff08;包括表情&#xff09;、语音、图片、视频、位置、链接。名片发送会失败。下面就这五种分别详解如下&#xff1a; 1. 文本&#xff08;包括表情&#xff09;发送文本 后台格式: <xml>…

有的日期输入框,可直接调用javascripts

转载于:https://www.cnblogs.com/rf-bear/p/5549126.html

SQLServer锁升级

锁升级是将众多细粒度锁转换为较少的粗粒度的锁的过程&#xff0c;以削减系统开销。当事务超过它的升级极限时&#xff0c;Microsoft SQL Server™ 2000 自动将行锁和页锁升级为表锁。 例如&#xff0c;当事务从表中请求行时&#xff0c;SQL Server 自动获取受影响的行上的锁&a…

php ssl 不验证失败,php – 没有SSL的安全身份验证

我想到了一个没有SSL的认证系统似乎相当安全.我忽略了重要的事情吗&#xff1f;>用户点击登录页面>服务器生成用于传输的盐(t-salt)并将其存储在会话中>服务器将t-salt作为加载的登录页面的一部分发送给用户>用户输入用户名和密码并点击提交>浏览器MD5加密密码和…

TigerDLNA for ios 集成Tlplayer

好久没有写博客了&#xff0c;这次带着TigerDLNA for ios 跟大家见面 什么都不说先上图 1.优点 优点由于libTigerDLNA使用uiview封装&#xff0c;所以大家可以很方便的集成到自己的项目中。由于集成了tlplayer当然也可以只是作为一个播放器来使用&#xff0c;支持各种网络协议。…

Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面

说明&#xff1a; 实现效果&#xff1a; 1- 用ViewPager实现Fragmen之间的切换 2- 底部用RadioGroup实现&#xff0c;更方便的实现图片和字体颜色的改变&#xff0c;更方便的通过RadioButton的点击事件来控制页面切换 原文地址&#xff1a;http://www.runoob.com/w3cnote/andro…

《那些年啊,那些事——一个程序员的奋斗史》——44

蓝牙程序&#xff0c;对于写了几个小程序的段伏枥来说&#xff0c;其实并不是一个非常难以企及的目标。产品的蓝牙是用模块的方式&#xff0c;通过串口和CPU进行连接的&#xff0c;只需要发送相应的AT指令即可操作。因为通信的管道是串口&#xff0c;而串口基本上是每个CPU必备…

matlab 开普勒方程,第二章 开普勒方程.ppt

3.1 开普勒轨道根数 轨道根数描述 轨道大小 半长轴a 常数 轨道形状 偏心率e 常数 轨道面方位 轨道倾角i和升交点赤经Ω 常数 轨道方位 近地点角距ω 常数 航天器在轨道中的位置 真近点角f 非均匀变化 平近点角M 均匀变化 纬度幅角ωf 非均匀变化 3.2 开普勒轨道根数与星下点轨迹…

读取XML文件的节点内的内容

<?xml version"1.0" encoding"utf-8" ?> <data> <tag3>15</tag3> <tag6>14</tag6> </data> Private Function GetXML(ByVal name As String) As String Dim path As String Dim xx As String "…

springmvc错误 Spring3.X jdk8 java.lang.IllegalArgumentException

最近在学习springmvc--碰到一个特别蛋疼的错误 javax.servlet.ServletException: Servlet.init() for servlet springMVC threw exceptionorg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)org.apache.catalina.valves.ErrorReportValv…

网页音乐播放器代码

如果你也想往自己的博客里&#xff0c;网页里加入音乐播放器&#xff0c;只要复制下面的网页音乐播放器代码&#xff0c;做适当的修改就可以啦&#xff01;有很多播放器可以选择&#xff0c;不要挑花眼哦&#xff01; 中true或1表示自动播放&#xff0c;false或0表示手动播放 l…

matlab里面filename1,matlab 每次从一个txt文件(里面每行是一个图像名字,如1.jpg之类的)读取一行字符串...

这个也得同时统计文本文件里有多少行。code如下&#xff1a;用三种方法实现这样的读取clcclose allclear all% method one 这种方法很啰嗦&#xff0c;但是matlab却会一直支持textscan这个函数fid fopen(listName.txt);filename1 textscan(fid,%s);k length(filename1{1})…

Android 如何添加一种锁屏方式

前言 欢迎大家我分享和推荐好用的代码段~~声明 欢迎转载&#xff0c;但请保留文章原始出处&#xff1a; CSDN&#xff1a;http://www.csdn.net 雨季o莫忧离&#xff1a;http://blog.csdn.net/luckkof 正文 a) 定义lockscreen 的在type是在…

Linux下常见命令

安装和登陆命令 Mount&#xff1a;挂载命令。把存储介质指定成系统中的某个目录&#xff0c;比如挂载光驱mount /dev/cdrom把CDROM挂载&#xff0c;可在目录/mnt/cdrom下查看内容。 umount&#xff1a;卸载命令&#xff0c;比如umount /dev/cdrom exit&#xff1a;退出终端命令…

axure 鼠标样式,Axure8-动态面板+简单鼠标事件实现单页面应用

随着互联网的发展&#xff0c;各种网站技术以及网站的呈现技术层出不穷&#xff0c;网站的页面展现已经从之前的页面间跳转到现在大行其道的单页面应用&#xff0c;页面内容的切换不再需要进行页面的跳转了&#xff0c;使用起来更加舒适。功能在变化&#xff0c;技术在变迁&…

Visual Studio 内存泄漏检测方法

Visual Studio 内存泄漏检测方法非MFC程序可以用以下方法检测内存泄露&#xff1a;1.程序开始包含如下定义&#xff1a;#ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)#else#define DEBUG_CLIENTBLOCK#endif // _DEBUG#define _CRTDBG_MAP_A…

javaweb下载文件

//读取文件->写出文件 public static void main(String[] args) { InputStream in null; OutputStream out null; try{ File file new File("c:\\123.doc"); in new FileInputStream(file); out new FileOutputStream("c:\\666.doc"); int len 0; …