C# Module 3 建立與使用變數
- 關鍵字
- 識別字
- 程式結構
- 資料型別
- 資料型別轉換
- 位元運算子
- 移位運算子
- 格式化輸出
-
關鍵字 (Keywords)
- 關鍵字在C#程式語言事先賦予的字元或字串,已經具有特別用途。
abstract | do | in | protected | true |
as | double | int | public | typeof |
base | else | interface | readonly | uint |
bool | enum | internal | ref | ulong |
break | event | is | return | unchecked |
byte | explicit | lock | sbyte | unsafe |
case | extern | long | sealed | ushort |
catch | false | namespace | short | using |
char | finally | new | sizeof | virtual |
checked | fixed | null | stackalloc | volatile |
class | float | object | static | void |
const | for | operator | string | while |
continue | foreach | out | struct | |
decimal | goto | override | switch | |
default | if | params | this | |
delegate | implicit | private | throw |
-
識別字 (Identifier)
- 程式設計時我們必須為每一個變數、常數、方法、函式、程序、類別及物件等命名, 以上所有變數、常數、方法等名稱, 統稱為程式語言的識別字
- 識別字必須以字母、@、底線_ 為開頭
- 識別字的英文大小寫視為不同的字元或字串
- 識別字是自己創建的,最好具有特別意義,有助於日後閱讀及維護
- 不可以用一些奇怪的符號或數字當作開頭
- 識別字的命名方法又可分為:
- Pascal Casing (帕斯卡命名法) StuNumber
- Camel Casing (駝峰命名法)
- 大駝峰 (跟帕卡斯命名法一樣) StuNumber
- 小駝峰 (跟匈牙利命名法一樣) stuNumber
- Hungarian Notation (匈牙利命名法) stuNumber
- (變數名稱使用匈牙利命名法,其餘命名空間名稱、類別名稱、方法名稱多以Pascal Casing命名法)
-
程式結構
- 命名空間
- 類別(class, struct, enum, delegate, interface)
- 方法(field, method, property, constant, event)
- 類別(class, struct, enum, delegate, interface)
- 命名空間
- 宣告變數
- 先寫資料型態,再寫變數名稱
- 區域變數:寫在方法裡面,使用前要設定變數的值
- 類別變數:寫在類別裡面(又稱做欄位),沒有宣告變數值也可以使用,因為有預設值
-
資料型別
- 因為不同性質的資料需要的記憶體空間均不同, 而 C# 為了有效地使用記憶體儲存資料, 於是規劃了以下的資料型別, 分別是數值型別的整數、浮點數、decimal、char、bool 及參照型別的 object 與 string。 這些型別又稱為預設的資料型別, 以便提昇資料處理效率, 也就是讓小東西用小箱子裝、大東西用大箱子裝的道理, 如此才能更有效率地管理記憶體。
- 實質型別 (Value Type)
- 內建型別 (如表一)
- 結構 struct (結構型別&結構內的成員預設值為private)
- 列舉 enum (列舉型別&列舉內的成員預設值為public)
- 參考型別 (Reference Type)
- 類別 class (類別內的成員預設值為private)
- 介面 interface (介面內的成員預設值為public)
- 委派 delegate
- 陣列 array
- 物件 object
- 字串 string
表一:
別名 | .NET內建別名 | 所需記憶體(位元組byte) | 值域&說明 |
sbyte | System.Sbyte | 1 | 負2的7次方 ~ 正2的7次方減1 |
byte | System.Byte | 1 | 0 ~ 2的8次方減1 |
short | System.Int16 | 2 | 負2的15次方 ~ 正2的15次方減1 |
ushort | System.UInt16 | 2 | 0 ~ 2的16次方減1 |
int | System.Int32 | 4 | 負2的31次方 ~ 正2的31次方減1 |
uint | System.UInt32 | 4 | 0 ~ 2的32次方減1 |
float | System.Single | 4 (有效位數7) | check google |
double | System.Double | 8 (有效位數15~16) | check google |
long | System.Int64 | 8 | 負2的63次方 ~ 正2的63次方減1 |
ulong | System.UInt64 | 8 | 0 ~ 正2的64次方減1 |
decimal | System.Decimal | 16 (有效位數28) | 世界無敵大...check google |
bool | System.Boolean | 1 | 判斷true/false |
char | System.Char | 2 | 單一Unicode字元 |
object | System.Object | 物件型別,可存放任意型別的資料 | |
string | System.String | 字串型別 |
-
資料型別的轉換
- 隱含轉換 Implicit Conversion - 自動轉換 數值小的轉成數值大的"OK" (short可直接轉換成int或long型別)
- float a = 3.4f; int b = 200; a = b; Console.WriteLine(a); //結果為200
- 明確轉換 Explicit Conversion - 強制轉換 數值大的轉成數值小的"不OK" (short不可直接轉換成int或long型別)
- float a =3.4f; int b =200; b = (int)a; Console.WriteLine(b); //結果為3 (小數部分會被捨棄)
- 隱含轉換 Implicit Conversion - 自動轉換 數值小的轉成數值大的"OK" (short可直接轉換成int或long型別)
-
位元運算子 (1=true, 0=false)
- (A&B) And -有錯就錯!
- (A|B) Or -有對就對!
- (A^B) Either...Or -不可都對也不可都錯! (兩運算值相同則為0(false),相反則為1(true))
- (~A) Not - 相反! (此為單一運算子,將1轉為0,0轉為1)
-
移位運算子
- ">>"右移運算子-從左邊開始補0計算 (看移幾位就補幾個0)
- "<<"左移運算子-從右邊開始補0計算 (看移幾位就補幾個0)
-
格式化輸出
- 語法為 {index1,alignment:formatChar}
- index1 表示第1比資料,依此類推
- alignment 表示對齊的寬度(正號靠右對齊,負號靠左對齊)
- formatChar 表示格式字元(如下表)
- 語法為 {index1,alignment:formatChar}
格式字元 | 功能說明 |
Cor c | 以貨幣NT$方式顯示資料,預設小數兩位 Console.WriteLine("{0,0:C3}", 25); //顯示NT$25.000 |
D or d | 以n位數顯示十進位資料,空白處補0 Console.WriteLine("{1,0:D5}", 25); //顯示00025 |
E or e | 科學記號E為10的次方,預設取小數6位 Console.WriteLine("{2,0:E)", 250); //顯示2.500000E+002 |
F or f | 以小數n位數來顯示資料,四捨五入 Console.WriteLine("{3,0:F3", 25.66666); //顯示25.667 |
N or n | 使用千位符號,若N1表示保留小數第1位,預設為小數第二位 Console.WriteLine("{4,0:N3}", 2500); //顯示2,500.000 |
X or x | 以十六進位制顯示資料 Console.WriteLine("{5,0:X}", 255); //顯示ff |