値型と参照型の間のC#の差

簡単な紹介

  数年前、唯一の学校で参照型があり、存在価値がスタックのタイプであるスタックを知っているが、最終的には、なぜこのような記憶の利点、およびその保存されているかを理解していない、ちょうど今年はブログを記録し始めた、といくつかを読んだとき本の内容は、それを記録します。

 

値タイプ

タイプ デフォルト値 説明
バイト 0 符号なし8ビット整数(0〜255)
sbyte 0 符号付き8ビット整数(127 -128)
長いです 0 64ビット(符号付き整数-2
ULONG 0 64ビット符号なし整数
ショート  0 16ビット符号付き整数
USHORT  0 16ビット符号なし整数
int型 0 32ビット符号付き整数
UINT  0 32ビット符号なし整数
浮く  0.0 これは、単精度浮動小数点数を表します。
ダブル 0.0 これは、倍精度浮動小数点を表し、
小数  ヌル 28精度
CHAR '\ 0' 16の文字
BOOL  偽 trueまたはfalse
構造体  ヌル 構造
列挙型  ヌル 列挙型

 

1.継承(System.ValueType)の暗黙の型の値は、一般的にスタックに保持されているタイプの値は、インスタンスの値は、スタック内のオープンスペースの種類自体が既に時刻フィールドが含まれている場合、性能がありますコントロールのGC、管理ヒープへの圧力を軽減するために使用されるタイプの値、および減少されるべきではないスタックに格納されていないので、基準速度型より(参照タイプが指示物体データメモリアドレスに格納されている)、及び値タイプアプリケーションの有効期間中にゴミのリサイクル回。

 値を作成する際に型のインスタンスを作成するために添加した場合、次のように入力し、それらを積み重ね、それぞれ0 NUMです。これらの単純な型定義の言葉は新しい構文に従い、多くの問題を作成した場合、これらを与えるために、コンパイラの構文は最適化されていますが、直接書き込むことができますので、int型NUM = 0;

パブリック クラスのテスト
{ 
   int型 NUM 
}

 

 

 

参照型

 

タイプ デフォルト値 説明
クラス   ヌル カテゴリ
オブジェクト ヌル  すべてのタイプのオブジェクトから派生します
ヌル 
インタフェース ヌル インターフェース
アレイ ヌル  配列
代表 ヌル  委ねます

1.引用类型的数据都是存放在堆当中,在使用new操作返回的是对象的内存地址,

 

 static void Main(string[] args)
        {
            string str = "测试";
            Console.ReadLine();
        }

 

2.下面我们改变下str的值,引用类型不会去改变已经存在内存当中的数据,如果现在我们把str的值改为一个“test”,实际上他会在堆当中创建一个新的内存区域,并且把str的指针指向新创建的这个对象,原来的那个数据“测试”,在经过gc扫描的时候,发现并没有任何引用的话,gc会释放掉。

 static void Main(string[] args)
        {
            string str = "测试";
             str="Test";
            Console.ReadLine();
        }

3.有的时候在开发的时候,我们分不清楚为什么要给string类型初始化的时候设置string.Empty,而不是""呢,那是因为string.empty只是创建了一个空的对象,但是""的话是去内存开辟了相应的空间,所以如果一个在开始不清楚变量值得时候,可以尽量采用string.Empty来创建。       

static void Main(string[] args)
        {
            string str =string.Empty;
            string st="";
            Console.ReadLine();
        }

 总结

值类型:

  1.  栈中存储具体的值,减少缓解了托管堆的压力,并且减少了应用程序生存期内的垃圾回收次数。
  2. 值类型在被当做参数传递的时候,实际上是对值类型的字段进行复制,对性能有所影响。
  3. 值类型不一定都存在栈中,如果一个类(class)当中包含了值类型(int num),那么这个num实际上是存储在堆上的。
  4. 值类型都是密封类

引用类型:

  1. 引用类型存在堆当中,new 获取的实际上是指向对象的内存的地址。
  2. 引用类型当做参数传递的时候,传递的是引用的地址,而不是引用。
  3. 将引用的变量赋值给另一个变量,实际上是复制的内存地址,两个变量指向的相同的对象。
  4. 引用类型可以派生新类型。

おすすめ

転載: www.cnblogs.com/zhengyazhao/p/11371691.html