程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#值類型和援用類型應用示例

c#值類型和援用類型應用示例

編輯:C#入門知識

c#值類型和援用類型應用示例。本站提示廣大學習愛好者:(c#值類型和援用類型應用示例)文章只能為提供參考,不一定能成為您想要的結果。以下是c#值類型和援用類型應用示例正文


在剛加入任務面試時,我們常常會碰到有關值類型和援用類型的成績,你答復的怎樣樣直接影響你在他人心目中的印象,你答復的欠好解釋你對C#沒有深刻的懂得進修,明天我帶年夜家回想下C#中的援用類型和值類型。CLR支撐兩品種型:援用類型和值類型。固然FCL中年夜多半類型都是援用類型但法式頂用的最多的照樣值類型。援用類型老是從托管堆上分派的,C#的new操作會前往對象的內存地址--也就是指向對象的數據的內存地址。假想假定每次應用一個Int32值時,都停止一次內存分派,機能會遭到多年夜的影響,為了晉升簡略、經常使用的類型的機能,CLR供給了名為“值類型”的輕量級類型。值類型的實例普通在線程棧上分派。在代表值類型實例的一個變量中,其實不包括一個指向實例的指針。相反,變量中包括了實例自己的字段。值類型的實例不受渣滓收受接管器的掌握。是以,值類型的應用減緩了托管堆中的壓力,並削減了一個運用法式在其性命周期須要停止的渣滓收受接管次數。.net framework SDK文檔清晰地指出哪些類型是援用類型,哪些是值類型。任何稱為“類”的類型都是援用類型,例如,System.Exception 類、System.IO.FileStream 類和System.Random類都是援用類型。相反文檔將一切的值類型稱為構造或列舉。例如, System.In32構造、System.Boolean構造、System.Decimal構造、System.DayOfWeek列舉和System.Drawing.FontStyle列舉都是值類型。一切的構造都是籠統類型System.ValueType的直接派生類。System.ValueType自己又是System.Object派生的,一切的值類型都必需從System.ValueType派生。一切的列舉都是從System.Enum籠統類型派生,後者又是從System.ValueType派生的。

以下代碼演示了援用類型和值類型。


//援用類型(因為應用了‘Class')
class SomeRef{public Int32 x;}

//值類型(因為應用了‘Struct')
struct SomeVal{public Int32 x;}

static void ValueTypeDemo(){
SomeRef r1 = new SomeRef();   //在堆上分派
SomeVal v1 = new SomeVal(); //在棧上分派
r1.x = 5; //提領指針
v1.x = 5;   //在棧上修正
Console.WriteLine(r1.x);   //顯示“5”
Console.WriteLine(v1.x);  //異樣顯示“5”

SomeRef r2 = r1; //只復制援用(指針)
SomeVal v2 = v1;   //在棧上分派並復制成員
r1.x = 8;  //r1.x和r2.x都邑更改
v1.x = 9; //v1.x會更改,但v2.x不變

Console.WriteLine(r1.x);   //顯示“8”
Console.WriteLine(r2.x);   //顯示“8”
Console.WriteLine(v1.x);   //顯示“9”
Console.WriteLine(v2.x); //顯示“5”
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved