生活随笔
收集整理的這篇文章主要介紹了
C#之基本知识和语法3 - 数据类型
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)載地址:http://www.jb51.net/article/15507.htm
引用類型和值類型的區(qū)別
| 值類型 | 引用類型 |
| 內(nèi)存分配地點 | 分配在棧中 | 分配在堆中 |
| 效率 | 效率高,不需要地址轉(zhuǎn)換 | 效率低,需要進行地址轉(zhuǎn)換 |
| 內(nèi)存回收 | 使用完后,立即回收 | 使用完后,不是立即回收,等待GC回收 |
| 賦值操作 | 進行復(fù)制,創(chuàng)建一個同值新對象 | 只是對原有對象的引用 |
| 函數(shù)參數(shù)與返回值 | 是對象的復(fù)制 | 是原有對象的引用,并不產(chǎn)生新的對象 |
| 類型擴展 | 不易擴展 | 容易擴展,方便與類型擴展 |
1.值類型
值類型包括簡單值類型和復(fù)合型類型。簡單值類型可以再細分為整數(shù)類型、字符類型、實數(shù)類型和布爾類型;而復(fù)合類型則是簡單類型的復(fù)合,包括結(jié)構(gòu)(struct)類型和枚舉(enum)類型。 整數(shù)類型 | 數(shù)據(jù)類型 | 說明 | 取值范圍 | 對應(yīng)于System程序集中的結(jié)構(gòu) |
| sbyte | 有符號8位整數(shù) | -128-127 | SByte |
| byte | 無符號8位整數(shù) | 0-255 | Byte |
| short | 有符號16位整數(shù) | -32768-32767 | Int16 |
| ushort | 無符號16位整數(shù) | 0-65535 | UInt16 |
| Int | 有符號32位整數(shù) | -2147489648-2147483647 | Int32 |
| uint | 無符號32位整數(shù) | 0-42994967295 | UInt32 |
| long | 有符號64位整數(shù) | -263-263 | Int64 |
| ulong | 無符號64位整數(shù) | 0-264 | UInt64 |
字符類型 C#中采用Unicode字符集來表示字符類型。 實數(shù)類型 | 數(shù)據(jù)類型 | 說明 | 取值范圍 |
| float | 32位單精度實數(shù) | 1.5*10-45-3.4*1038 |
| double | 64位雙精度實數(shù) | 5.0*10-324-1.7*10308 |
| demcimal | 128位十進制實數(shù) | 1.0*10-28-7.9*1028 |
布爾(bool)類型 取值只能是ture或者false,bool類型對應(yīng)于.NET類庫中的System.Boolean結(jié)構(gòu)。它在計算機中占4個字節(jié),即32位存儲空間。 結(jié)構(gòu)類型 把一系列相關(guān)的信息組織成為一個單一實體的過程,這就是創(chuàng)建一個結(jié)構(gòu)的過程。 struct person { string m_name; //姓名 int m_age; //年齡 string m_sex; //性別 } 枚舉類型 主要用于表示一個邏輯相關(guān)聯(lián)的項和組合。使用關(guān)鍵字enum來定義。 enum Weekday { Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday } 2.引用類型 引用類型包括類(class)、接口(interface)、委托(delegate)和數(shù)組(array)。 類(class) 類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象集合。創(chuàng)建類的實例必須使用關(guān)鍵字new來進行聲明。 (重點)類和結(jié)構(gòu)之間的根本區(qū)別在于:結(jié)構(gòu)是值類型,而類是引用類型。對于值類型,每個變量直接包含自身的所有數(shù)據(jù),每創(chuàng)建一個變量,就在內(nèi)存中開辟一塊區(qū)域;而對于引用類型,每個變量只存儲對目標存儲數(shù)據(jù)的引用,每創(chuàng)建一個變量,就增加一個指向目標數(shù)據(jù)的指針。 接口(interface) 應(yīng)用程序之間要相互調(diào)用,就必須事先達成一個協(xié)議,被調(diào)用的一方在協(xié)議中對自己所能提供的服務(wù)進行描述。在C#中,這個協(xié)議就是接口。接口定義中對方法的聲明,既不包括訪問限制修飾符,也不包括方法的執(zhí)行代碼。 (注意)如果某個類繼承了一個接口,那么它就要實現(xiàn)該接口所定義的服務(wù)。也就是實現(xiàn)接口中的方法。 委托 委托用語封裝某個方法的調(diào)用過程。 委托的使用過程分為3步: 1.定義 delegate void HelloDelegate(); 2.實例化 HelloDelegate hd = new HelloDelegate(p1.Say); //p1.Say調(diào)用的方法 3.調(diào)用 hd(); 數(shù)組 數(shù)組主要用于同一數(shù)據(jù)類型的數(shù)據(jù)進行批量處理。在C#中,數(shù)組需要初始化之后才能使用。 如:int[] array1 = new int[3]{2,3,5}; int[] array1 = {2,3,5}; (注意)對規(guī)則多維數(shù)組,調(diào)用Length屬性所得的值為整個數(shù)組的長度;而調(diào)用其GetLength方法,參數(shù)為0時得到數(shù)組第1維的長度,為1時得到數(shù)組第2維的長度,以此類推。而對于不規(guī)則多維數(shù)組,調(diào)用Length屬性和以0為參數(shù)調(diào)用其GetLength方法,得到的都是第一維的長度。 3.類型轉(zhuǎn)換 數(shù)值轉(zhuǎn)換 數(shù)值的轉(zhuǎn)換有一個原則,即從低精度類型到高精度類型通常可以進行隱式轉(zhuǎn)換;而從高精度類型則必須進行顯式轉(zhuǎn)換。 如:int i = 100; long j = 1000; j = i; //隱式轉(zhuǎn)換,由低精度到高精度的轉(zhuǎn)換 i = (int)j; //顯式轉(zhuǎn)換,有高精度到底精度的轉(zhuǎn)換 具體轉(zhuǎn)換過程中信息的丟失就看各數(shù)據(jù)類型的精度了。(可以參考上面數(shù)據(jù)類型) 枚舉轉(zhuǎn)換 枚舉類型與其他任何類型之間不存在隱式轉(zhuǎn)換。而和枚舉類型相關(guān)的顯式轉(zhuǎn)換包括: 1.從所有整數(shù)類型(包括字符類型)和實數(shù)類型到枚舉類型的顯式轉(zhuǎn)換; 2.從枚舉類型到所有整數(shù)類型(包括字符類型)和實數(shù)類型的顯式轉(zhuǎn)換; 3.從枚舉類型到枚舉類型的顯式轉(zhuǎn)換。 裝箱和拆箱轉(zhuǎn)換 主要是值類型與引用類型之間相互轉(zhuǎn)換。 如:object obj 1= 10; int i = (int)obj; //拆箱 int j = 100; object obj2 = j; //裝箱 轉(zhuǎn)換檢查 如果出現(xiàn)轉(zhuǎn)換失敗,程序就會拋出一個System.InvalidCastException異常
轉(zhuǎn)載于:https://www.cnblogs.com/gaoxu387/archive/2011/05/27/2059459.html
總結(jié)
以上是生活随笔為你收集整理的C#之基本知识和语法3 - 数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。