在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
C#的數據類型分為兩大類:值類型和引用類型. 一,值類型 值類型又分為以下三大類:簡單類型(Simple types)和結構類型(Struct types)和枚舉類型(Enumeration types) 1.簡單類型也稱為純量類型,是直接由一系列遠素構成的數據類型.從計計算機的表示角度來看這些簡單類型可以分為整數類型,布爾類型,字符類型,和實數類型. 1.1整數類型的變量的值為整數,共有以下九种: 數據類型 特征 取值大小 sbyte 有符號8位整數 -128到127 byte 無符號8位整數 0到255 short 有符號16位整數 -32768到32767 ushort 無符號16位整數 0到65535 int 有符號32位整數 -2147483648到2147483647 uint 無符號32位整數 0到4294967295 long 有符號64位整數 -9223372036854775808到9223372036854775807 ulong 無符號64位整數 0到18446744073709551615 位數是按2的指數冪來定議的,如sbyte占一個字節即2的8次方. 1.2布爾類型 即真和假,分別用true和false來表示.C#中不像其它語言可以轉換成真假,這里是不合法的. 1.3實數類型 實數類型分為單精度(float)和雙精度(double)和十進制類型(decimal)三种類型. 單精度表示的大小為1.5*10的負45次方到3.4*10的38次方,精度為7位數 雙精度表示的大小為5.0*10的負324次方到1.7*10的308次方,精度為15到16位. 十進制類型是一种高精度的128位數據類型,表的的大小為1.0*10的負28次方到7.9*10的28次方的28至29位有效數字.定議的時候要用m下標以表明它是一個十進制類型.如: decimal d_value=1.0m;如果沒有m會當是雙精度處理. 1.4字符類型 采用的是unicode字符集一個unicode的標準長度為16位. 以下以些轉議字符 "' 單引號 "" 雙引號 "" 反斜槓 "O 空字符 "a 感嘆號(Alert) "b 退格 "f 換頁 "n 新行 "r 回車 "t 水平tab "v 垂直tab 2.結構類型 把一個單一實體的類型就叫做結構類型,每一個變量稱為結構的成員.結構類型的變量采用struct來進行聲明.如下面我們定議的通訊錄記錄結構 struct PhoneBook { public string name; public string phone; public string address; } PhoneBook p1; ph.name="athrun"; 對成員的訪員 下面是把一個結構類型作為另一個結構類型的成員類型.如下: struct PhoneBook { public string name; public string phone; public uint age; public struct address { public string city; public string street; public uint no; } } 通訊錄這個結構中又包括了"地址"這個結構,結構"地址"類型包括城市,街道,門牌號碼三個成員. 3.枚舉類型 枚舉(enum)實際上是為一組在邏輯上密不可分的整數值提供便於記憶的符號,比如我們聲明一個代表星期的枚舉類型的變量; enum WeekDay { Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday }; WeekDay day; 為枚舉類型的元素所給的值類型限於long,int,short,byte等整數類型. 二,引用類型 "引用"這個詞在這里的含議是,該類型的變量不直接存儲所包含的值,而是指向它所要存儲的值.也就是說,引用類型存儲實際數據的引用值的地址,引用類型有四种: 類,代表,數組,接口. 1,類是一种包含數據成員,函數成員和嵌套類型的數據結構.類的數據成員有常量,域和事件.函數成員包括方法,屬性,索引指示器,運算符,構造函數和析構函數.類和結構同樣都包含了自己的成員,但它們之間最主要的區別在於:類是引用類型,而結構是值類型. 類支持繼承機制,通過繼承,子類可以擴展父類的數據成員和函數方法,進而達到代碼重用和設計重用的目的.下面是一個類: class PhoneBook { private string _name; private string _phone; private struct _address { public string city; public string street; public uint no; }
public string Phone { get {return _phone;} set {_phone=value;} } public PhoneBook(string n) { name=n; } public Edit(){;} } 上面這個類中包括有數據成員有域name,phone,address屬性Phone;類的函數成員有構造函數PhoneBook(string n),方法Edit. 2.代表(delegate).它實際上相當於c#中的函數指針原型.與指針不同的是,代表在c#是類型安全的.在聲明代表時,只需要指定代表指向的原型的類型,它不能有返回值,也不能帶有輸出類型的參數. using System; delegate int MyDelegate(); //聲明一個代表 public class MyClass { public int InstanceMethod() { Console.WriteLine("Call the instance method"); return 0; } static public int StaticMethod() { Console.WriteLine("Call the static method"); return 0; } } public class Test { static public void Main() { MyClass p=new MyClass(); //將代表指向非靜態的方法InstanceMethod MyDelegate d=new MyDelegate(p.InstanceMethod); //調用非靜態方法 d(); //將代表指向靜態的方法StaticMethod d=new MyDelegate(MyClass.StaticMethod); //調用靜態方法 d(); } } 程序的輸出結果是: call the instance method call the static method 3.數組 數組是一組類型相同的有序數據. class Test { static void Main() { string [] a1; //一維string數組 string [,] a2; //二維 string [,,] a3; //三維 string [][] j2; //可變數組(數組) string [][][][] j3; //多維可變數組 } } 三,裝箱(boxing)和拆箱(unboxing) 裝箱和拆箱機制使得在c#類型系統中,任何值類型,引用類型和object(對像)類型之間進行轉換,我們稱這种轉為綁定連接.簡單的說,有了裝箱和拆箱後,對任何類型的值來說最終我們都可以看作是object類型. 1,裝箱轉換是將一個值類型隱式地轉換成一個object類型,或者把這個值類型轉換成一個被該值類型應用的接口類型(interface-type).把一個值類型的值裝箱,也就是創建一個object實例並將這個值復制給這個object. 我們也可以用顯式的方法來進行裝箱操作: Int i=10; Object obj=object(i); 我們看一下下面的程序 Using system; Class test { Public static void Main() { Int i=10; Object obj=I; //進行裝箱操作,對像類型 If (obj is int) { Console.Write(“The value of I is boxing!”); } I=20; //改變i的值 Console.WriteLine(“int :i={0}”,i); Console.WriteLine(“object: obj={0}”,obj); } } 輸出結果為: The value of I is boxing! Int :i=20; Object obj=10; 這說明了被裝箱的類型的值是作為一個拷貝賦給對像的. 2,拆箱轉換,和裝箱轉換正好相反,拆箱轉換是指將一個對像類型顯式地轉換成一個值類型,或是將一個接口類型顯式地轉換成一個執行該接口的值類型. 拆箱的過程分為兩步:首先,檢查這個對像實例,看它是否為給定的值類型的裝箱值.然後,把這個實例的值拷貝給值類型的變量. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论