zoukankan      html  css  js  c++  java
  • .NET技术之美-c#的类型基础

    一、值类型和引用类型

    值类型

    包含:结构和枚举(值类型都隐式的继承自system.ValueType)

    栈(stack)是一种后进先出的结构、用来处理存放变量

    堆(heap)是为了对引用类型实例(对象)分配空间的内存区域,在堆上创建的对象会将其地址传递给变量进行处理

    值类型在变量声明的过程中堆栈的操作过程

    看下面的代码

    public struct ValPoint{
        public int x;
        public ValPoint(int x){
        this.x=x;
          }
    }

    上面定义了一个值类型

    在程序中写下代码

    ValPoint valPoint;

    则会在栈上创建一个变量valPoint,并且此变量将会包括所有的字段和属性

    New操作符

    ValPoint valPoint=new ValPoint();

    new操作符在值类型实例化一个对象的时候,并不会再堆上创建一个实例,仅仅是作为初始化值类型valPoint变量的字段值,在值类型中都会将值类型中的变量的值初始化为0.

    1.=左边ValPoint valPoint,在线程栈上创建一个ValPoint类型的变量vPoint,结构中的所有成员的没有赋值.在进行new ValPoint()之前,将vPoint压到栈上

    2.=右边的new ValPoint(),new操作符并不会分配内存,也不是创建实例。它仅仅是调用ValPoint结构的默认构造函数,根据构造函数去初始化vPoint结构的所有字段

    引用类型

    包括:接口、类、委托等

     

    引用类型在变量声明的过程中堆栈的操作过程

    public class RefPoint{
          public int x;
          public RefPoint(int x){
          this.x=x;
       }
    }

    在程序中写下代码

    RefPoint reflPoint;

    声明一个引用类型的变量,在线程栈上创建一个不包含任何地址数据的变量

    New操作符

    RefPoint reflPoint=new RefPoint(1);

    使用new操作符后,在应用程序的堆上创建一个引用类型对象的实例,并为它分配内存地址,自动传递该实例的引用给构造函数

    特殊的值类型(简单类型)

    包括:int、byte

    装箱与拆箱

    装箱:将值类型转换为引用类型

    装箱的过程

    1.在堆上位新生成的对象实例分配内存.该对象实例包含数据,但它没有名称

    2.将栈上值类型变量的值可复制到堆上对象中

    3.将堆上创建的对象地址返回给引用类型变量

    拆箱:将引用类型转换为值类型

    对象判等

    public class RefPoint{
            public int x;
        public RefPoint(int x){
        this.x=x;
      }
    }
       public struct ValPoint{
            public int x;
        public ValPoint(int x){
        this.x=x;
      }
    }

    引用类型判等

    RefPoint rPoint1=new RefPoint(1);
       RefPoint rPoint2=rPoint;

    常量性和原子性

    对象复制

    浅度复制

    1.值类型:复制变量本身或则包括字段的值

    2.引用类型:复制引用类型的实例所指向的地址

    深度clone复制开辟新内存,clone出来的新对象不会跟着旧对象变就是,浅复制会跟着被复制的对象一起变

    举个例子,比如说你银行卡掉了,浅度复制相当于你补办银行卡,取钱存钱都还是在原来的账户里面,只是指向这个账户的银行卡变了,账户还是那个账户。但而深度复制相当于你重新开了个户,把原来的钱存在里面。

  • 相关阅读:
    mvc control 请求两次问题
    Jquery跨域获得Json
    使用ajax跨域withCredentials的作用
    以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)
    【算法】字符串近似搜索(转)
    字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)
    图像相似度算法的C#实现及测评
    求时间差的sql语句。 比如如下数据
    微信公众平台开发之微信access_token如何有效长期保存
    PowerDesigner打开设计文件后提示failed to read the fileXXX的解决办法
  • 原文地址:https://www.cnblogs.com/ilooking/p/4356927.html
Copyright © 2011-2022 走看看