CSharp
跳至導覽
跳至搜尋
這個頁面用來筆記 C# 的相關知識。
物件導向
與 Java 相似概念
因為自己有學過 Java,所以自己稍微整理一下相關概念。
- 繼承類別和介面用的關鍵字是
:
而不是extends
或implements
- override 直接打而不用像 Java 還要 Annotation (
@Override
) - C# 的命名空間 (namespace) 系統其實很像 Java 的 Package,不過,在引用的時候是用
using
關鍵字而不是import
- C# 9.0 之後支援頂層語句(或稱最上層陳述式[1]),可以省略 Main 方法和
using System;
等語句。
- C# 9.0 之後支援頂層語句(或稱最上層陳述式[1]),可以省略 Main 方法和
- 宣告類別、建立物件不能說很像,只能說一模一樣。但是仍然可以使用新寫法[2],像是:
public class Container
{
private int _capacity;
public Container(int capacity) => _capacity = capacity; // Lambda 運算式
}
C# 12 新寫法就跟 Kotlin 或 JavaScript 看齊了:
public class Container(int capacity)
{
private int _capacity = capacity;
}
- 屬性可以加
required
代表該屬性一定要進行初始化
- C# 類別內每個屬性有
get()
和set()
,不用再自己寫 Getter 和 Setter 了,可以交給自動實作的屬性 [3] 處理,也可以在上面設定存取權限(如private
、internal
等)- 如果有需要針對 Getter 或 Setter 做檢查還是可以自己寫,但是自動實作的屬性就會失效,必須要兩者都手動寫(不能一個自動一個手動)
- C# 的存取權限定義有點不太一樣:
protected
的權限只有本身和繼承類別,但是 Java 更廣,只要在同 Package 都可以用- 多了
internal
[4],指在相同組件內 (Assembly)[5] 可以存取,講白話就是可以在同一個 DLL 內存取[6],可以跟protected
或private
混用,表示兩者其中一個的意思。 - 可以參考 別人整理出來的比較表格
資料型態
通常 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
: 字串
常值與尾碼
F
或f
: 可建立float
常值,若無該常值則為double
常值M
或m
: 可建立decimal
常值- 字串用
""
(雙引號)包起來,字元用''
(單引號)包起來
字串處理
文字輸出
Console.WriteLine(); // 輸出後換行
或是
Console.Write(); //輸出後不換行
字串串接
有兩種方法:
- 用
+
串接 - 使用
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)
指示詞可以混用,例如,你可以同時用字串差捕和逐字字串。
參考資料
- ↑ 可參考: https://learn.microsoft.com/zh-tw/dotnet/csharp/fundamentals/program-structure/top-level-statements
- ↑ 建構和初始化的所有方法: https://learn.microsoft.com/zh-tw/dotnet/csharp/fundamentals/types/classes#constructors-and-initialization
- ↑ https://learn.microsoft.com/zh-tw/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties
- ↑ https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/keywords/internal
- ↑ 關於組件是啥可以參考微軟官方文件:https://learn.microsoft.com/zh-tw/dotnet/standard/assembly/
- ↑ 白話來源: https://blog.johnwu.cc/article/c-sharp-access-modifiers-internal.html
- ↑ https://learn.microsoft.com/zh-tw/dotnet/api/system.text.stringbuilder?view=net-8.0
- ↑ https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/tokens/interpolated
- ↑ https://learn.microsoft.com/zh-tw/dotnet/csharp/programming-guide/strings/#verbatim-string-literals