一、核心C#(第二部分)
---恢復(fù)內(nèi)容開始---
預(yù)定義數(shù)據(jù)類型
值類型和引用類型。
1.存儲(chǔ)在內(nèi)存的不同地方:值類型存儲(chǔ)在堆棧中,而引用類型存儲(chǔ)在托管堆上。注意區(qū)分某個(gè)類型是值類型還是引用類型,因?yàn)檫@種存儲(chǔ)位置的不同會(huì)有不同的影響。例如:int 是值類型,這表示下面的語句會(huì)在內(nèi)存的兩個(gè)地方存儲(chǔ)值20:
i = 20; j = i;但考慮下面的代碼。這段代碼假定已經(jīng)定義了一個(gè)類Vector,Vector是一個(gè)引用類型,它有一個(gè)int類型的成員變量Value:
Vector x, y; x = new Vector(); x.Value = 30; y = x; Console.WriteLine(y.value); y.Value = 50; Console.WriteLine(x.Value)要理解的重要一點(diǎn)是在執(zhí)行這段代碼后,只有一個(gè)Vector對(duì)戲那個(gè)。x和y都指向包含該對(duì)象的內(nèi)存位置。因?yàn)閤和y是引用類型的變量,聲明這兩個(gè)變量只保留了一個(gè)引用---而不會(huì)實(shí)例化給定類型的對(duì)象。兩情況下都不會(huì)真正的創(chuàng)建對(duì)象。要?jiǎng)?chuàng)建對(duì)象,就必須使用new關(guān)鍵字,如上所示。因?yàn)閤和y引用同一對(duì)象,所以對(duì)x的修改會(huì)影響y,反之亦然。因此上面的代碼會(huì)顯示30和50。
?
C#認(rèn)可的基本預(yù)定義類型并沒有內(nèi)置于C#語言中,而是內(nèi)置于.Net Framework中。例如,在C#中聲明一個(gè)int類型的數(shù)據(jù)時(shí),聲明的實(shí)際上是.Net結(jié)構(gòu)System.Int32的一個(gè)實(shí)例。這聽起來似乎很深?yuàn)W,但其意義深遠(yuǎn):這表示在語法上,可以把所有的基本數(shù)據(jù)類型看成支持某些方法的類。例如,要把int i 轉(zhuǎn)換為string,可以編寫下面的代碼:
string s = i.ToString();應(yīng)強(qiáng)調(diào)的是,這種便利語法的背后,類型實(shí)際上任存儲(chǔ)仍為基本類型。基本類型在概念上用.Net結(jié)構(gòu)表示,所以肯定沒有性能損失。
一些C#類型的名稱與C++和Java類型一致,但其定義不同。
在C#中,int類型總是32位帶符號(hào)的整數(shù),而在C++中,int是帶符號(hào)的證書,但其位數(shù)取決于平臺(tái)(在Windows上是32位)。
在C#中,所有數(shù)據(jù)類型都以與平臺(tái)無關(guān)性的方式定義,以備將來C#和.Net遷移到其他平臺(tái)上。
namespace EnumStudy {class Program{static void Main(string[] args){EnumMyStudy es = new EnumMyStudy();es = EnumMyStudy.優(yōu)秀;WriteStudy(es);EnumMyStudy es1 = new EnumMyStudy();es1 = EnumMyStudy.及格;EnumMyStudy es2 = (EnumMyStudy)Enum.Parse(typeof(EnumMyStudy), es1.ToString(), true);Console.WriteLine(es2.ToString() + " " + (int)es2 + " "+ es2);Console.ReadKey();}static void WriteStudy(EnumMyStudy es){switch (es){case EnumMyStudy.優(yōu)秀:{Console.WriteLine("您的學(xué)習(xí)成績?yōu)?#xff1a;優(yōu)秀");}break;case EnumMyStudy.良好:{Console.WriteLine("您的學(xué)習(xí)成績?yōu)?#xff1a;良好");}break;case EnumMyStudy.及格:{Console.WriteLine("您的學(xué)習(xí)成績?yōu)?#xff1a;及格");}break;case EnumMyStudy.不及格:{Console.WriteLine("您的學(xué)習(xí)成績?yōu)?#xff1a;不及格");}break;case EnumMyStudy.差:{Console.WriteLine("您的學(xué)習(xí)成績?yōu)?#xff1a;差");} break;}}} }??
?
轉(zhuǎn)載于:https://www.cnblogs.com/Dean27/p/6029591.html
總結(jié)
以上是生活随笔為你收集整理的一、核心C#(第二部分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8-2:C++继承之父类和子类对象赋值转
- 下一篇: C#中的运算符重载