常量使用const關鍵字來定義,常量在聲明時必須賦值,且之後不能再對其賦值 eg:const int a = 10;算法
C#中的數據能夠分爲兩大類:值類型(Value Type)和引用類型(Reference Type)。數組
值類型包括: 結構體(數值類型,bool型,用戶定義的結構體),枚舉,可空類型數據結構
引用類型包括: 數組,接口,委託,類(用戶自定義類、String類、Object類)ide
值類型的對象,繼承自System.ValueType類(此類的對象倒是引用類型的),內容直接儲存在棧上(以及MSDN中提到的「或在結構中之內聯方式分配的」——「or allocated inline in a structure」);引用類型的對象,其內容存儲於堆上,棧上的相應變量名下只存儲該處的堆地址,長度爲4字節/32位(32位操做系統)或者8字節/64位(64位操做系統)。函數
值類型的對象不能爲null。不能從已有的值類型派生新的數據類型。post
棧的特色:存放數據類型(值類型),其優勢:比在堆上分配空間更快;用完以後當即自動釋放;賦值方便(使用等號)性能
堆的特色:存放引用類型。ui
值類型的數據類型所有繼承自System.ValueType類,它們又分爲如下幾類:spa
C#系統自定義了13種數值類型的數據類型:
整型 9種:byte, short, int(系統默認), long sbite, ushort, uint, ulong,char ----類型裝換Convert 類操作系統
名稱 |
值範圍 |
系統名稱 |
屬於CLS |
佔用內存長度 |
---|---|---|---|---|
byte |
0至28-1(128) |
System.Byte |
Yes |
1字節/8位 |
sbyte |
-27至27-1 |
System.SByte |
No |
1字節/8位 |
ushort |
0至216-1(65535) |
System.UInt16 |
No |
2字節/16位 |
short |
-215至215-1 |
System.Int16 |
Yes |
2字節/16位 |
char |
\0000至\ffff |
System.Char |
Yes |
2字節/16位 |
uint |
0至232-1(約4.29×109) |
System.UInt32 |
No |
4字節/32位 |
int |
-231至231-1 |
System.Int32 |
Yes |
4字節/32位 |
ulong |
0至264-1(約1.84×1019) |
System.UInt64 |
No |
8字節/64位 |
long |
-263至263-1 |
System.Int64 |
Yes |
8字節/64位 |
浮點型3種:float, double(系統默認), decimal
名稱 |
值範圍 |
系統名稱 |
屬於CLS |
精度 |
佔用內存長度 |
實例 |
---|---|---|---|---|---|---|
float(單精度) |
±1.5×10-45 至±3.4×1038 |
System.Single |
Yes |
7位 |
4字節/32位 |
float f = 3.14f |
double(雙精度) |
±5.0×10-324至±1.7×10308 |
System.Double |
Yes |
15至16位 |
8字節/64位 |
double d = 2.14 |
decimal(高精度) |
±1.0×10-28至±7.9×1028 |
System.Decimal |
Yes |
28至29位 |
16字節/128位 |
decimal d = 2.13M |
布爾型(邏輯)1種:bool
可能的取值爲true和false,佔用內存長度1字節/8位。C#中再也不有相似於「零等於flase,非零int值等於true」的變換。bool型的系統名稱爲System.Boolean,屬於CLS.
其餘2種:
enum 枚舉
枚舉的數據類型的聲明:[屬性(attributes)] [訪問標識(modifiers)] enum 名稱(identifier) [:基類型(base-type)] {枚舉列表(enumerator-list)} [;]
枚舉類型的本意有兩點:一是將難以記憶的整型數常量(除char外的8種整型數均可以)標記爲更好理解的變量名。二是引入強類型,在須要採用整形數常量表示的變量之間創建屏障。雖然每一個字符串表明了一個整形數常量,可是具體使用枚舉類數據類型的整型數常量時仍須要強制類型轉換。這個整數值在C#默認是int型的。
枚舉列表中各個變量的賦值默認是從0開始,遞加1的。
例如:enum days:int {Sat, Sun, Mon}; 取值(int)days.Sun爲1 或 enum days:int {Sat=1, Sun, Mon}; 取值(int)days.Sun爲2
struct 結構體
用戶自定義的值類型數據類型,和類類似也有不一樣(有篇博客具體介紹過);自己沒有繼承這一特色,所以與繼承相關的一切(例如抽象方法)結構體均不具有,除了兩點:全部的結構體繼承自System.Object類、結構體能夠繼承(實現)接口。
類 | 結構體 | |
---|---|---|
類型 | 引用類型 | 值類型 |
實例化 | 必須經過new實例化 | 能夠不new,直接聲明,但聲明後必須賦值 |
構造方法(函數) | 方法不受限制(有、無參數都可,默認是無參) | 方法必須帶有參 |
繼承 | 自身繼承System.Object,可繼承(包含接口),也可被繼承 | 除自身繼承System.ValueType外,不可繼承(除接口,一般叫作實現接口),也不可被繼承 |
成員 | 字段聲明時可賦值(初始化) | 字段聲明時不可賦值,方法通常公有 |
做參數傳遞給方法 | 傳遞的是引用(值一但修改全部指向改類值都已改變) | 傳遞的是實際值(值修改不會影響其它指向值,除非被ref修飾;ref修飾後傳遞引用) |
性能介紹:結構是值類型,因此會影響性能,但根據使用結構的方式,這種影響多是正面的,也多是負面的。正面的影響是爲結構分配內存時,速度很是快,由於它們將內聯或者保存在堆棧中。在結構超出了做用域被刪除時,速度也很快。另外一方面,只要把結構做爲參數來傳遞或者把一個結構賦給另外一個結構(例如A=B,其中A和B是結構),結構的全部內容就被複制,而對於類,則只複製引用。這樣,就會有性能損失,根據結構的大小,性能損失也不一樣。注意,結構主要用於小的數據結構。但當把結構做爲參數傳遞給方法時,就應把它做爲ref參數傳遞,以免性能損失——此時只傳遞告終構在內存中的地址,這樣傳遞速度就與在類中的傳遞速度同樣快了。另外一方面,若是這樣作,就必須注意被調用的方法能夠改變結構的值。
分類:
賦值操做符: | = |
---|---|
複合賦值運算符: | +=,-=,*=,/=,%= |
算數運算符: | +,-,*,/,%(ß二元運算符),++,--(ß一元運算符) |
條件運算符: | >,<,>=,<=,!=,== |
邏輯運算符: | &&(遇假爲假),||(同真爲真),! |
位運算符: | &,|,^,~,<<,>> |
備註: | 幾乎全部的操做符都只能操做基本數據類型,可是」=」,」==」和」!=」, 這些操做符能操做全部的對象。除此之外String類支持」+」和」+=」。 |
優先級:
postfix operators | [] . (params) expr++ expr-- |
---|---|
unary operators | ++expr --expr +expr -expr ~ ! |
creation or cast | new (type)expr |
multiplicative | * / % |
additive | + - |
shift | << >> >>> |
relational | < > <= >= instanceof |
equality | == != |
bitwise AND | & |
bitwise exclusive OR | ^ |
bitwise inclusive OR | | |
logical AND | && |
logical OR | || |
conditional |
? |
assignment | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
備註 | 上面的操做數優先級從上到下依次下降,同一個單元格內的優先級相同 |
while (先判斷後執行,)
用法:while(循環條件){循環體}
其它用法:while(變量名){ case 變量值1:[執行語句] break;······default:[執行語句] break;}
do-while (先執行一次再判斷)
用法:do{循環體}while(循環條件);
for (和while相似,先判斷)
用法:for([初始化循環變量];[循環條件];[修改循環變量值]){循環體}
foreach (遍歷)
用法:foreach(類型 變量名 in 類型數據列表){}
擴展:continue(跳出本次循環進行下次循環)、break(跳出整個循環)、return(跳出整個方法,無關緊要返回值)
一維數組:類型[] 變量名 = new 類型[長度];
多維數組(矩形數組):類型[,] 變量名 = new 類型[外長度,內長度];--注:[]裏的,等於幾維減1
交錯數組(數組的數組):類型[][] 變量名 = 類型[長度][];