首页 > Windows开发 > 详细

.NET技术之美-c#的类型基础

时间:2015-03-22 11:52:13      阅读:200      评论:0      收藏:0      [点我收藏+]

一、值类型和引用类型

值类型

包含:结构和枚举(值类型都隐式的继承自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;

常量性和原子性

.NET技术之美-c#的类型基础

原文:http://www.cnblogs.com/ilooking/p/4356927.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!