zoukankan      html  css  js  c++  java
  • c#值类型与引用类型区别

    1. 值类型对象的两种表示方式:未装箱和已装箱,引用类型总是处于已装箱
    2. 值类型从System.ValueType派生。该类型提供了与System.Object相同方法,但System.ValueType重写了Equals方法, 能在两个对象的自断值完全匹配的前提下返回true。比外,System.ValueType重写了GetHashCode方法,生成哈希码时,这个重写方法所用的算法会将对象的实例字段中的值考虑在内。由于这个默认实现存在性能问题,所以定义自己的值类型时应重写EqualsGetHashCode方法,并提供它们的显式实现。
    3. 由于不能将值类型作为基类型来定义新的值类型或者新的引用类型,所以不应在值类型中引用任何新的虚方法。所以方法都不能是抽象的,所以方法都隐式密封(不可重写)。
    4. .由于不能将值类型作为基类型来定义新的值类型或者新的引用类型,所以不应在值类型中引用任何新的虚方法。所以方法都不能是抽象的,所以方法都隐式密封(不可重写)。.引用类型的变量包含堆中对象的地址。引用类型的变量创建时默认初始化为null,表明当前不指向有效对象。试图使用null引用类型变量会抛出NullReferenceException异常。相反,值类型的变量总是包含其基础类型的一个值,而且值类型的所有成员都初始化为0。值类型变量不是指针,访问值类型不可能抛出NullReferenceException异常。CLR确实允许为值类型添加“可空”(nullability)标志。
    5. 将值类型变量赋给另一个值类型变量,会执行逐字段的复制。将引用类型的变量赋给另一个引用类型的变量只复制内存地址。
    6. 基于上一条,两个或多个引用变量能引用堆中同一个对象,所以对一个变量执行的操作可能影响到另一个变量引用的对象。相反,值类型变量自成一体,对值类型变量执行的操作不可能影响另一个值类型变量
    7. 由于未装箱的值类型不在堆中分配,一旦定义了该类型的一个实例的方法不再活动,为它们分配的存储就会被释放,而不是等着进行垃圾回收。
  • 相关阅读:
    百度云推送
    web请求报出 “超过了最大请求长度” 【注意:重启IIS】
    页面多个Jquery版本共存的冲突问题,解决方法!
    Web Api 中使用 PCM TO WAV 的语音操作
    Web Api 如何做上传文件的单元测试
    那些年收集的前端学习资源
    原创: 做一款属于自己风格的音乐播放器 (HTML5的Audio新特性)
    Web Api 接口文档制作
    如何在Asp.Net WebApi接口中,验证请求参数中是否携带token标识!
    JavaScript 面试题,给大家补补基础,加加油,埋埋坑!
  • 原文地址:https://www.cnblogs.com/yan7/p/8092598.html
Copyright © 2011-2022 走看看