首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

控制台程序增強工具集:密碼輸入、指令分派、智能補全與幫助系統

     編輯:關於.NET

控制台應用雖輕量,但交互功能(密碼掩碼、指令解析、Tab 補全、幫助系統)手寫繁瑣。本文封裝 ConsoleUtil 與 CmdDispatcher 兩大核心類,開箱即用,支援 C# 3.0+ 語法。

核心功能

類功能關鍵 API
ConsoleUtil密碼掩碼輸入、非空驗證ReadPassword(msg, errMsg)、Readline(msg, errMsg)
CmdDispatcher指令註冊、參數綁定、Tab 補全、幫助生成、分派執行AddCmdFunc、ReadlineWithIntelliSence、Handle、PrintHelp

CmdDispatcher 詳解

指令註冊:支援 0-4 參數的委托

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 處理回退。
  • 指令解析:字符串分割 + 反射匹配委托參數數量,自動轉換類型(擴展可支援自定義轉換器)。
  • 智能補全:維護指令 Trie 樹,Tab 觸發前綴匹配,單一候選自動補全,多候選列表顯示。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved