委托與事件在 .NET 應用極廣,但初學者常感困惑。本文透過兩個範例由淺入深講解:委托定義、為何使用、事件由來、.NET 中的委托事件、Observer 模式意義,並探討中間代碼。
最簡單的問候方法:
public void GreetPeople(string name) {
EnglishGreeting(name);
}
public void EnglishGreeting(string name) {
Console.WriteLine("Morning, " + name);
}
傳入 "Jimmy" 會輸出 "Morning, Jimmy"。現需全球化支援中文:
public void ChineseGreeting(string name) {
Console.WriteLine("早上好, " + name);
}
GreetPeople 需判斷用哪版本,引入枚舉:
public enum Language { English, Chinese }
public void GreetPeople(string name, Language lang) {
switch(lang) {
case Language.English: EnglishGreeting(name); break;
case Language.Chinese: ChineseGreeting(name); break;
}
}
雖解決問題,但擴展性極差:新增日文、韓文需修改枚舉與 GreetPeople,違反開放封閉原則。這正是委托登場的動機。