C#中值类型与引用类型

  1. 值类型

A,像int, float, char , double,bool等都是值类型

B,string, 自定义类等都是引用类型

它们的区别:源于复制策略的不同,

值类型直接包含值,换言之,变量引用的位置就是值在内存中实际存储的位置。因此,将一个原始变量的值赋给另一个变量,会在新变量的位置创建原始变量的值的一个内存副本。两个变量不可能引用同一个内存位置(除非其中一个或两个都是out或ref参数;根据定义,这种参数是另一个变量的别名),更改原始变量的值不会影响另一个变量的值,变量各有各的存储位置。因此,改变一个值类型变量的值不会影响其他任何值类型的值。

  2.引用类型

 对于引用类型的变量,它的值是对一个对象实例的引用,引用类型的变量存储的是引用(通常是内存地址),要去那个位置找到对象实例的数据。

  1. 自定义值类型的重要性

两种自定义值类型

A, 结构体(struct),B,枚举(enum)

         声明结构

         //use keword struct to declare a value type

struct Angle

{

         public Angle(int degrees,int minutes,int seconds)

         {

                   _Degrees = degrees;

                   _Minutes = minutes;

                   _Seconds = seconds;

         }

        

         public int Degrees

         {

                   get{ return _Degrees; }

         }

         private int _Degrees;

        

         public int Minutes

         {

                   get{ return _Minutes;}

         }

         private int _Minutes;

        

         public int Seconds

         {

                   get{ return _Seconds;}

         }

         private int _Seconds;

public Angle Move(int degrees, int minutes, int seconds)

         {

                   return new Angle(

                            Degrees + degrees,

                            Minutes + minutes,

                            Seconds + seconds

                   )

         }

}

原文地址:https://www.cnblogs.com/gylhaut/p/5734765.html