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”
}