zoukankan      html  css  js  c++  java
  • c# 类和结构的区别有哪些

    类和结构的区别:
    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是值类型,内存分配在线程堆栈上,此差异导致了上述的所有的不同。

     在asp.net编程中,合理使用结构,有时会带来意外的惊喜。下面我们看看如何选择类与结构。

    4.如何选择类和结构
    (1)实现一个主要勇于存储数据的结构时,可以考虑结构
    (2)Struct变量占用堆栈的空间,因此适用于数据量相对小的场合,堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些。
    (3)结构数组具有更高的效率
    (4)结构表示如点,矩形和颜色这样轻量的对象,例如,如果声明一个含有1000个点的对象数组,则将为引用每个对象分配附加的内存,在此情况下,结构的成本较低。
    (5)在表现抽象和多级别的对象层次时,类是最好的选择
    (6)在大多数情况下,该类型只是一些数据时,结构师最佳的选择。
  • 相关阅读:
    django学习第85天Django的Ajax
    django学习第84天Django常用字段和参数
    django学习第83天Django聚合查询.分组查询.FQ查询
    django学习第82天Django多表查询
    django学习第81天Django模板层2(单表查询.模块的导入和继承.静态文件配置)
    django学习第80天Django模板层1
    django学习第79天Django视图层
    Linux 内核文档翻译
    Linux设备模型——设备驱动模型和sysfs文件系统解读
    内核空间内存申请函数kmalloc kzalloc vmalloc的区别
  • 原文地址:https://www.cnblogs.com/linuxnotes/p/3094134.html
Copyright © 2011-2022 走看看