zoukankan      html  css  js  c++  java
  • C#中Class与Struct区别

       

    1)class 是引用类型,继承自System.Object;stuce是值类型,继承自System.ValueType类,因此不具多态性。但是注意,System.ValueType是个引用类型。
    2)从职能观点来看,class表现为行为;而stuct常用于存储数据。
    3)class支持继承,可以继承自类和接口;而struct没有继承性,struct不能从class继承,也不能作为class的基类,但struct支持接口继承。
    4)classs可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函数。因此,struct没有自定义的默认无参构造函数,默认无参构造器只是简单地把所有的值初始它的的0等价值。
    5)实例化时,class要使用new关键字;而struct可以不使用new 关键字,对于struct如果是实例无参的时就可以无new了;但如果是有参的构造函数生成时,就要用new了。如果不以new来实例化struct,则其所有的字段将处于未分配状态,直到所有字段完成初始化,否则引用未赋值的字段会导致编译错误。


    6)class可以是抽象类(abstract),可以声明抽象函数;而struct为抽象也不能声明抽象函数。
    7)class可以声明protected成员,virtual成员,sealed成员和override成员;而struct不可以但是值得注意的是,struct可以重载System.Object的3个虚方法,(Equals(),Tostring(),GetHashTable())
    8)class 的对象复制分为浅拷贝和深拷贝,必须经过特别的方法来完成复制;而struct创建的对象复制简单,可直接以等号连接即可。
    9)class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配。
    10)作为参数传递时,class变量以按址方式传递;而struct变量是以按值方式传递的。

    我们可以简单的理解,class是一个可以动的机器,有行为,有多态;而struct就是一个零件箱,组合了不同结构零件。
    当然,使用class基本可以替代struct的任何场合,可以说在面向对象的编程里,横行天下。class后来居上。但有些地认识不这是有用的着struct。

    a)实现一个订用于存储数据的结构时,可以考虑struct。
    b)struct变量占用堆栈空间,因此只适用数据量相对小的场合。
    c)结构数组具有更高的效率。
    d)提供某些和非托管代码通信的兼容性。

  • 相关阅读:
    深入理解Elasticsearch写入过程 使用routing会导致docid不再全局唯一 Allocate策略 + routing参数
    force merge原理 + ES写入数据的过程
    Linux内核参数--time-wait回收--不建议设置
    elasticsearch迁移--利用腾讯云cos和nfs
    蓝鲸安装失败
    Apache Tomcat/8.5.51 secretRequired="true"
    自定义Nginx返回页面
    本地yum 源 iso文件 安装ansible
    elasticsearch字段属性值截断为32位
    rabbitmq-consul-apollo部署文档
  • 原文地址:https://www.cnblogs.com/haofaner/p/2281100.html
Copyright © 2011-2022 走看看