您好,登錄后才能下訂單哦!
C#中的類型有兩種:值類型(Value Type)和引用類型(Reference Type)。值類型的變量直接包含它們的數據,而引用類型的變量存儲對它們的數據的引用,后者稱為對象。對于引用類型,兩個變量可能引用同一個對象,因此對一個變量的操作可能影響另一個變量所引用的對象。對于值類型,每個變量都有它們自己數據的副本(除ref和out參數變量外),因此對一個變量的操作不可能影響另一個變量。
C#值類型可分為簡單類型(Simple Type)、枚舉類型(Enum Type)、結構類型(Struct Type)和可以為null(Nullale Type)的類型。
C#引用類型可分為類類型(Class Type)、接口類型(Interface Type)、數組類型(Array Type)和委托類型(Delegate Type)。
C#值類型(Value Type):
1. 簡單類型(Simple Type):
有符號整型:sbyte(8 bit), short(16 bit), int(32 bit), long(64 bit)
無符號整型:byte(8 bit), ushort(16 bit), uint(32 bit), ulong(64 bit)
Unicode字符:char,表示一個UTF-16編碼單元。
浮點型:float(32 bit), double(64 bit),它們使用單精度和雙精度的IEEE754格式表示。
高精度小數型:decimal(128 bit),適合用于財務計算和貨幣計算。
布爾型:bool,用于表示值為true和false的布爾值。
2. 枚舉類型(Enum Type):
enum E { ... }形式的用戶自定義類型
3. 結構類型(Struct Type):
struct S { ... }形式的用戶自定義類型
4. 可以為null的類型(Nullable Type):
其他所有具有null值的值類型的擴展
C#引用類型(Reference Type):
1. 類類型(Class Type):
所有其他類型的最終基類:object
Unicode字符串:string
class C { ... }形式的用戶自定義類型
2. 接口類型(Interface Type):
interface I { ... }形式的用戶自定義類型
3. 數組類型(Array Type):
一維數組和多維數組,例如int[]和int[,]
4. 委托類型(Delegate Type):
delegate int D( ... )形式的用戶自定義類型
C#值類型中簡單類型的取值范圍:
有符號整型:
sbyte, 8 bit,取值范圍:-128 ~ 127
short, 16 bit, 取值范圍:-32678 ~ 32767
int, 32 bit, 取值范圍:-2147483648 ~ 2147483647
long, 64 bit, 取值范圍:–9223372036854775808 ~ 9223372036854775807
無符號整型:
byte, 8 bit, 取值范圍:0 ~ 255
ushort, 16 bit, 取值范圍:0 ~ 65535
uint, 32 bit, 取值范圍:0 ~ 4294967295
ulong, 64 bit, 取值范圍:0 ~ 18446744073709551615
浮點型:
float, 32 bit, 取值范圍:1.5 * 10^-45 ~ 3.4 * 10 ^ 38,7位精度
double, 64 bit, 取值范圍:1.5 * 10^-324 ~ 1.7 * 10^308,15位精度
高精度小數型:
decimal, 128 bit, 取值范圍:1.0 * 10^-28 ~ 7.9 * 10^28,28位精度
字符型:
char, 16 bit, 取值范圍:0 ~ 65535
布爾型:
bool, 取值范圍:true/false
C#程序使用類型聲明(Type Declaration)來創建新類型。類型聲明指定***手類型的名稱和成員。在C#類型分類中,有五類是用戶可定義的:類類型、結構類型、接口類型、枚舉類型和委托類型。
類類型定義一個包含數據成員和函數成員的數據結構。類類型支持單一繼承和多態,派生類可用來擴展和專用化基類的機制。
結構類型與類類型相似,表示一個帶有數據成員和函數成員的結構。但是,與類不同,結構是一種值類型,并且不需要堆分配。結構類型不支持用戶指定的繼承,并且所有結構類型都隱式地從類型object繼承。
接口類型定義了一個協定,作為一個公共函數成員的命名集。實現某個接口的類或結構必須提供該接口的函數成員的實現。一個接口可以從多個基接口繼承,而一個類或結構可以實現多個接口。
委托類型表示對具有特定參數列表和返回類型的方法的引用。通過委托,我們能夠將方法作為實體賦值給變量和作為參數傳遞。委托類似于在其他某些語言中的函數指針的概念,但是與函數指針不同,委托是面向對象的,并且是類型安全的。
類類型、結構類型、接口類型和委托類型都支持泛型,困此可以通過其他類型將其參數化。
枚舉類型是具有命名常量的獨特的類型。每種枚舉類型都具有一個基礎類型,該基礎類型必須是八種整型之一。枚舉類型的值集和它的基礎類型的值集相同。
C#支持由任何類型組成的一維和多維數組。與以上列出的類型不同,數組類型不必聲明就可以使用。實際上,數組類型是通過在某個類型名后加一對方括號來構造的。
可以為null的類型也不必聲明就可以使用。對于每個不可以為ull的值類型T,都有一個相應的可以為null的類型T?,該類型可以容納附加值null。
C#的類型系統是統一的,因此任何類型的值都可以按對象處理。C#中的每個類型直接或間接地從object類類型派生,而object是所有類型的最終基類。引用類型的值都被視為object類型,被簡單地當作對象來處理。值類型的值則通過對其執行裝箱和拆箱操作按對象來處理。
當將值類型的值轉換為類型object時,將分配一個對象實例(也稱“箱子”)以包含該值,并將值復制到該箱子中。反過來,當將一個object引用強制轉換為值類型時,將檢查所引用的對象是否含有正確的值類型,如果有,則將箱子中的值復制出來。
C#的統一類型系統實際上意味著值類型可以“按需”轉換為對象。因為統一,所以使用類型object的通用庫可以與引用類型和值類型一同使用。
C#變量包括字段、數組元素、局部變量和參數。
變量表示了存儲變量,并且每個變量都有一個類型,以決定什么樣的值能夠存入變量,如下概述:
1. 不可以為null的值類型變量:類型完全相同的值。
2. 可以為null的值類型變量:null值和類型完全相同的值。
3. object變量:null引用、對任何引用類型的對象的引用,或者對任何值類型的裝箱的引用。
4. 類類型變量:null引用、對該類類型的實例的引用,或者對從該類類型派生的類的實例的引用。
5. 接口類型變量:null引用、對實現該接口類型的類類型的實例的引用,或者對實現該接口類型的值類型的裝箱值的引用。
6. 數組類型變量:null引用、對該數組類型的實例的引用,或者對兼容數組類型的實例的引用。
7. 委托類型變量:null引用或對該委托類型的實例的引用。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。