控制台應用雖輕量,但交互功能(密碼掩碼、指令解析、Tab 補全、幫助系統)手寫繁瑣。本文封裝 ConsoleUtil 與 CmdDispatcher 兩大核心類,開箱即用,支援 C# 3.0+ 語法。
| 類 | 功能 | 關鍵 API |
|---|---|---|
| ConsoleUtil | 密碼掩碼輸入、非空驗證 | ReadPassword(msg, errMsg)、Readline(msg, errMsg) |
| CmdDispatcher | 指令註冊、參數綁定、Tab 補全、幫助生成、分派執行 | AddCmdFunc、ReadlineWithIntelliSence、Handle、PrintHelp |
delegate void Func0();
delegate void Func1(string s1);
delegate void Func2(string s1, string s2);
delegate void Func3(string s1, string s2, string s3);
delegate void Func4(string s1, string s2, string s3, string s4);
// 兩種註冊方式
cd.AddCmdFunc("cmd", func); // 簡潔模式,無幫助信息
cd.AddCmdFunc("cmd", "arg0 arg1", "指令說明", func); // 完整模式,自動生成 help
ReadlineWithIntelliSence():Tab 鍵觸發指令/參數補全,內建 help 指令顯示所有註冊命令及參數說明。PrintHelp() / PrintHelp(cmd):輸出格式化幫助文檔。cd.DefaultFunc = () => Console.WriteLine("未知指令,輸入 help 查看幫助");
static bool EXIT = false;
static void Main() {
string id = ConsoleUtil.Readline("帳號:", "帳號不能為空");
string pwd = ConsoleUtil.ReadPassword("密碼:", "密碼不能為空");
Console.WriteLine($"歡迎,{id}!");
var cd = CreateDispatcher();
while (true) {
Console.Write(cd.Prefix); // 預設 ">> "
string input = cd.ReadlineWithIntelliSence();
cd.Handle(input);
if (EXIT) return;
}
}
static CmdDispatcher CreateDispatcher() {
var cd = new CmdDispatcher();
cd.AddCmdFunc("help", "無參數", "查詢幫助", () => cd.PrintHelp());
cd.AddCmdFunc("help", "cmd", "查詢指定指令幫助", (cmd) => cd.PrintHelp(cmd));
cd.AddCmdFunc("exit", "無參數", "退出程序", () => EXIT = true);
cd.AddCmdFunc("cmd1", "無參數", "測試指令1", () => Console.WriteLine("Invoke cmd1"));
cd.AddCmdFunc("cmd1", "arg0", "帶參數指令1", (arg0) => Console.WriteLine($"Invoke cmd1({arg0})"));
cd.AddCmdFunc("cmd2", "arg0 arg1", "雙參數指令", (a0, a1) => Console.WriteLine($"Invoke cmd2({a0},{a1})"));
cd.AddCmdFunc("cmd3", (a0, a1, a2) => Console.WriteLine($"Invoke cmd3({a0},{a1},{a2})")); // 無幫助信息
return cd;
}

展示了密碼掩碼輸入、Tab 補全指令、help 幫助顯示、參數綁定執行等完整交互流程。
Console.ReadKey(true) 逐字符讀取,回顯 *,Enter 結束,Backspace 處理回退。