【學習資料】
《C#圖解教程》(第2~12章):https://www.cnblogs.com/moonache/p/7687551.html
電子書下載:https://pan.baidu.com/s/1mhOmBG0
【內容】
-
- 標識符命名
- 值類型及取值范圍
- 棧與堆(數據存儲方式)
- 特殊運算符
- 對象類型(object)
- 訪問修飾符(public、private、protected、internal)
- 可空類型(?、??、Nullable)
- 數組
- 一維數組
- 二維數組(矩形數組)
- 交錯數組(每行個數可不同,單獨new)
-
- 擴展知識
- 字符串的@
- 值類型、引用類型、ref 的區別
- 二進制表示
- 位運算溢出問題
- 擴展知識
【筆記】
-
標識符命名
-
標識符必須以 字母、下划線(_) 或 @ 開頭,后面可以跟一系列的 字母、數字(0-9)、下划線(_)。
-
不能使用C#保留的關鍵字,如 if,但可以為 @if
-
-
值類型及取值范圍
-
常量前綴指定基數
-
十進制:沒有前綴
-
十六進制:0x 或 0X 。如:0x10 表示 十進制 16
-
八進制:0 。如:010 表示 十進制 8
-
二進制:0b 。如:0b10 表示 十進制 2
-
-
常量后綴指定精度(U 和 L 分別表示unsigned和long)
-
-
u 或 U : 10U 表示 uint
-
l 或 L : 10L 表示 long
-
LU組合: 10LU 表示 ulong
-
- 棧與堆(數據存儲方式)
傳送門:https://www.cnblogs.com/shahdza/p/12236770.html
-
特殊運算符
-
對象類型(object)
-
所有類型的最終基類(包括值類型、struct、class)都是object。
-
裝箱:將 值類型 轉為 object
-
拆箱:將 objec t轉為 值類型
-
裝箱/拆箱會產生一定的消耗,盡量少用。
-
訪問修飾符
public | 所有對象 |
private | 只有本類的內部函數 |
protected | 本類及子類內部函數 |
internal | 同一程序集(dll) |
protected internal | 同一程序集(dll),或 其他程序集的子類內部函數 |
- 可空類型(Nullable、?、??)
-
int? i = 3 等同於 Nullable<int> i = new Nullable<int>(3)
-
int i; // 默認值為0
-
int? i; // 默認值為null
-
合並運算符(??):num3 = num1 ?? 5.34; // num1 如果為空值則返回 5.34
-
-
數組(Array)
-
一維數組:int[] numbers = new int[10];
-
初始化:= new int[] {1, 2, 3, 4, 5};
-
初始化:= {1, 2, 3, 4, 5};
-
二維數組:string[,] names = new string[5, 4];
-
每行個數固定相同(都是4)
-
初始化:= { {"a", "b", "c", "d"} , {"e", "f", "g", "h"} };
-
交錯數組:byte[][] scores = new byte[5][]
-
-
scores[i] = new byte[i + 3]
-
每行個數可以不同
-
初始化:= {new int[]{1,2,3} , new int[]{1,2,3,4} };
-
- 不同數組示意圖
- 二維數組和交錯數組的內存結構
【擴展知識】
- 字符串的@
-
- @(稱作"逐字字符串")將 轉義字符(\)當作普通字符對待
-
- 如:
- @"Hello \n World" : 其中\n不會被轉義,而是單做普通字符處理;
- 路徑:@"C:\xxx\xxx.doc" 等價於 "C:\\xxx\\xxx.doc"
- 如果要在@的字符串中使用雙引號("),需要用2個雙引號"" (而不是 \")
- 如:
-
值類型 、引用類型 、ref
-
值類型:當形參值改變時,實參值不變;相當於 形參是實參的拷貝,是不同的對象
-
引用類型:當形參值改變時,實參值也會改變;相當於 形參和實參,指向同一個對象,但形參和實參不是一個變量(類似指針變量)
-
引用傳遞ref:與“引用類型”區別在於,形參與實參是同一個變量(相當於取個別名)
-
class C { public int value = 0; } // 實參和形參是2個變量,但指向同一個對象 void changeC1(C c) { c.value = 10; c = new C(); c.value = 30; } // ref : 形參是實參的引用,是同一個變量 void changeC2(ref C c) { c.value = 10; c = new C(); c.value = 30; } // 調用 C m_c1 = new C(); // C m_c2 = new C(); // changeC1(m_c1); // 結果為 10 changeC2(ref m_c2); // 結果為 30
-
二進制表示
-
位運算(& | ^ ~ << >>)
-
& 、| 、^ 、~ :符號位參與運算
-
1 & -1 = 1
-
1 | -1 = -1
-
1 ^ -1 = -2
-
-1 ^ -8 = 7
-
~1 = -2
-
~-1 = 0
-
~-8 = 7
-
-
<< :符號位參與運算;高位丟棄,低位補0
-
-2147483646 << 1 = 4
-
-2147483646 << 29 = 1073741824
-
-2147483646 << 30 = -2147483648
-
-2147483646 << 31 = 0
-
-2147483646 << 32 = -2147483646
-
-2147483646 << 33 = 4
-
>>
-
有符號:
-
C# :補符號位(算術右移)
-
C++:各編譯器處理方法不一樣,有的補符號位(算術右移),有的補0(邏輯右移)
-
-
無符號:高位補0
-
-1 >> 1 = -1
-
-1 >> 2 = -1
-
-127 >> 1 = -64
-
-127 >> 6 = -2
-
-127 >> 7 = -1
-
-127 >> 8 = -1
-
-127 >> 31 = -1
-
-127 >> 32 = -127
-
-127 >> 33 = -64
-