【學習資料】
《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 = https://www.cnblogs.com/shahdza/p/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
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5305.html
標籤:其他
上一篇:Unreal Engine 4 藍圖完全學習教程(四)—— 變數與計算
下一篇:DirectX11 With Windows SDK--29 計算著色器:記憶體模型、執行緒同步;實作順序無關透明度(OIT)
