C# 是 .NET 平台上主流的強型別、物件導向程式語言。本教程針對具備程式基礎的開發者,快速梳理 C# 核心語法、資料結構、控制流程、物件導向、泛型、LINQ、非同步與現代特性,助你在短時間內上手實戰開發。
// 數值類型
int i = 42; long l = 100L; double d = 3.14; decimal m = 19.99m; // 金融計算用 decimal
bool flag = true;
char c = 'A';
// 字串 (參考類型,不可變)
string s = "Hello\nWorld\t!";
string raw = @"C:\Path\To\File"; // 逐字字串
string interpolated = $"{i} + {d} = {i + d}"; // 字串插值
// 陣列 (固定長度)
int[] arr = new int[10];
int[] arr2 = { 1, 2, 3 };
// 列表 (動態陣列,泛型)
var list = new List { 1, 2, 3 };
list.Add(4); list[0] = 10;
// 字典 (雜湊表)
var dict = new Dictionary { ["key"] = 1 };
dict["new"] = 2; int v = dict["key"];
// if-else / 三元運算
var max = (a > b) ? a : b;
// switch 表達式 (C# 8+)
var season = month switch { 12 or 1 or 2 => "Winter", 3..5 => "Spring", _ => "Other" };
// 迴圈
foreach (var item in collection) { ... }
for (int i = 0; i < 10; i++) { ... }
while (cond) { ... }
public class Person {
// 自動屬性 (含建構子參數 C# 12+)
public string Name { get; init; } // 僅初始化可設定
public int Age { get; set; }
// 建構子
public Person(string name, int age) => (Name, Age) = (name, age);
// 方法
public void Greet() => Console.WriteLine($"Hi, I'm {Name}");
// 解構子 (支援解構賦值)
public void Deconstruct(out string name, out int age) => (name, age) = (Name, Age);
}
// 繼承與多型
public class Student : Person {
public string School { get; set; }
public Student(string name, int age, string school) : base(name, age) => School = school;
public override void Greet() => Console.WriteLine($"Student {Name} from {School}");
}
public interface ISerializable {
string Serialize();
void Deserialize(string data);
}
// 介面預設實作 (C# 8+)
public interface ILoggable {
void Log(string msg) => Console.WriteLine($"[LOG] {msg}"); // 預設實作
}
// 泛型方法
public static T Max(T a, T b) where T : IComparable
=> a.CompareTo(b) > 0 ? a : b;
// LINQ 查詢語法 vs 方法語法
var adults = people.Where(p => p.Age >= 18).OrderBy(p => p.Name).ToList();
var names = from p in people where p.Age >= 18 select p.Name;
// GroupBy 分組統計
var stats = people.GroupBy(p => p.City)
.Select(g => new { City = g.Key, Count = g.Count(), AvgAge = g.Average(p => p.Age) });
string? name = null; 編譯期警告空參考風險。record Person(string Name, int Age); 不可變資料載體,自帶值語意相等比較。if (obj is Person { Age: >= 18 } p) ... 型別測試與屬性萃取合一。await foreach (var item in GetAsync()) 處理非同步資料流。// using 宣告 (C# 8) 自動 Dispose
using var fs = File.OpenRead("data.txt");
using var reader = new StreamReader(fs);
// 离开作用域自動釋放
// try-catch-finally
try { ... }
catch (IOException ex) when (ex.HResult == -2147024894) { ... } // 例外篩選器
finally { ... }
dotnet add package Newtonsoft.Json