CSharp

出自wiki-nesquate
跳至導覽 跳至搜尋

這個頁面用來筆記 C# 的相關知識。

物件導向

與 Java 相似概念

因為自己有學過 Java,所以自己稍微整理一下相關概念。

  • 繼承類別和介面用的關鍵字是 : 而不是 extendsimplements
  • override 直接打而不用像 Java 還要 Annotation (@Override)
  • C# 的命名空間 (namespace) 系統其實很像 Java 的 Package,不過,在引用的時候是用 using 關鍵字而不是 import
    • C# 9.0 之後支援頂層語句(或稱最上層陳述式[1]),可以省略 Main 方法和 using System; 等語句。
  • 宣告類別、建立物件不能說很像,只能說一模一樣。但是仍然可以使用新寫法[2],像是:
public class Container
{
    private int _capacity;

    public Container(int capacity) => _capacity = capacity; // Lambda 運算式
}

C# 12 新寫法就跟 KotlinJavaScript 看齊了:

public class Container(int capacity)
{
    private int _capacity = capacity;
}
  • 屬性可以加 required 代表該屬性一定要進行初始化
  • C# 類別內每個屬性有 get()set(),不用再自己寫 Getter 和 Setter 了,可以交給自動實作的屬性 [3] 處理,也可以在上面設定存取權限(如 privateinternal 等)
    • 如果有需要針對 Getter 或 Setter 做檢查還是可以自己寫,但是自動實作的屬性就會失效,必須要兩者都手動寫(不能一個自動一個手動)
  • C# 的存取權限定義有點不太一樣:
    • protected的權限只有本身和繼承類別,但是 Java 更廣,只要在同 Package 都可以用
    • 多了 internal[4],指在相同組件內 (Assembly)[5] 可以存取,講白話就是可以在同一個 DLL 內存取[6],可以跟 protectedprivate 混用,表示兩者其中一個的意思。
    • 可以參考 別人整理出來的比較表格

資料型態

通常 C# 在命名資料型態時都以小寫為主,這主要跟 C# 原先設計就是用來改進 C/C++ 的方向有關。

補充:宣告變數

通常以 string value; 的方式呈現,區分大小寫且不能用 #$ 等特數字元(只能英數和底線)

如果不想要宣告資料型別,可以用 var 讓 Compiler 自己推斷,但是第一次推斷之後就不會再變更型態了,也就是說以下程式碼是不允許的:

var message = "Hello World!";
message = 10.703m;

以下程式碼也不允許,因為 Compiler 無法推斷要用哪一種資料型態:

var message;

這跟弱型別語言如 JavaScript 有很大的不同。


相關名稱

  • bool: 布林
  • char: 字元
  • decimal: 整數
  • double: 浮點(雙倍精度)
  • float: 浮點
  • int: 整數
  • string: 字串

常值與尾碼

  • Ff: 可建立 float 常值,若無該常值則為 double 常值
  • Mm: 可建立 decimal 常值
  • 字串用 ""(雙引號)包起來,字元用 ''(單引號)包起來

字串處理

文字輸出

Console.WriteLine(); // 輸出後換行

或是

Console.Write(); //輸出後不換行

字串串接

有兩種方法:

  1. + 串接
  2. 使用 StringBuilder.Appened()[7]

跳脫字元

皆使用 \ 進行跳脫。

  • \": 新增雙引號
  • \t: Tab
  • \n: 換行
  • \u: 輸入 Unicode 字元(UTF-16)

指示詞

加在要輸出的字串前面。

  • $: 字串差補[8],可以在字串裡面用 {} 填入變數
  • @: 逐字字串[9],你在字串怎麼輸入就怎麼輸出

例如:

Console.WriteLine(@"    c:\source\repos
        (this is where your code goes)");

會輸出

    c:\source\repos
        (this is where your code goes)

指示詞可以混用,例如,你可以同時用字串差捕和逐字字串。

參考資料