在各種開發項目中使用公用類庫的擴展方法,通過上下文方式快速調用處理函數

来源:https://www.cnblogs.com/wuhuacong/archive/2022/03/25/16053755.html
-Advertisement-
Play Games

不管我們開發是基於Asp.net core 還是.net core,或者還是.net framework的相關應用,如果有一個比較全面的公用類庫以及相關的擴展函數來支撐,我們開發項目上會節省很多相關的處理方法查詢和封裝。本篇隨筆主要針對性的介紹基於一些對象進行擴展函數的封裝帶來的便利性進行說明,畢竟... ...


不管我們開發是基於Asp.net core 還是.net core,或者還是.net framework的相關應用,如果有一個比較全面的公用類庫以及相關的擴展函數來支撐,我們開發項目上會節省很多相關的處理方法查詢和封裝。本篇隨筆主要針對性的介紹基於一些對象進行擴展函數的封裝帶來的便利性進行說明,畢竟基於上下文的調用擴展函數,比不斷地去自己去類庫中查找那個方法合適,會更高效一些。

1、針對常規對象進行擴展函數的封裝

我們常常使用到的對象,可能包括有字元串(String)、日期對象(DateTime)、列表集合(List/IEnumerable)、常規對象Object、UI控制項(如普通的Control對象處理,其他常規控制項對象等),一般來說,這些常規類型的對象我們會在代碼中應用很多,對於上下文的一些快速的調用可以快速減少我們翻查代碼的時間,隨著時間的累積,我們會使用的更加快捷和熟悉。

字元串可能是我們日常使用C#代碼,操作最多的一個.net 基礎類型了,一般字元串涉及到格式判斷、格式轉換、內容截取、正則表達式處理、編碼處理等等,幾乎是五花八門。

我們一般為了方便,都會給字元串類型編寫一些擴展函數,以便於常規的處理。編寫擴展字元串函數的處理也很簡單,創建一個靜態類,併在方法中第一個方法參數指定為this即可,如下所示。

 我們可以編寫很多用於常規處理的字元串函數,如格式轉換和內容提取,以及正則表達式等。

 字元串的格式轉換是非常常見的處理,如對UrlEncode/HtmlEncode/Base64轉換/byte[]位元組轉換等等,一般我們可以把常見的放在一個靜態類裡面,這樣便於維護。

日期類型也是我們常見的,因此可以針對日期的格式轉換、日期的處理等內容整合到一個擴展函數裡面,便於快速的調用和維護。

針對常規的C#對象的擴展,我們編寫、收集整理了不少擴展函數,主要就是提高開發的便利性。如下截圖所示。

 有時候,我們在開發常規Windows項目的時候,需要用到對常規控制項的賦值、數據綁定等常規處理,我們也可以通過編寫擴展函數,並重載不同的方法,來更加的方便調用擴展函數的代碼處理。

 

而對於第三方的UI控制項,如DevExpress的一些控制項,如果處理的時候,也進行一些控制封裝,會使得調用代碼更加簡潔的,如下是針對一些常規DevExpress控制項的擴展函數封裝。

  

2、擴展函數的調用及便利

這些不同類型的控制項擴展函數的封裝,使得我們操作對象的處理更加便捷,如字元串轉換為int類型的時候,我們直接調用擴展函數轉換即可。

        /// <summary>
        /// 獲取表的所有記錄數量
        /// </summary>
        /// <returns></returns>
        public int GetRecordCount()
        {
            var action = "GetRecordCount";
            string url = GetTokenUrl(action);

            return JsonHelper<DataTable>.ConvertString(url).ToInt32();
        }

還有我們在開發界面的時候,更加方便調用來進行數據處理。如常規的對TreeList控制項的處理代碼,需要添加列和屬性的時候,代碼如下。

        /// <summary>
        /// 初始化樹控制項
        /// </summary>
        private void InitTree()
        {
            this.tree.Columns.Clear();//添加顯示列
            this.tree.Columns.Add(new TreeListColumn { FieldName = "Id", Caption = "Id" });//增加一個隱藏的欄位,存儲需要的ID
            this.tree.Columns.Add(new TreeListColumn { FieldName = "Name", Caption = "菜單名稱", Width = 160, VisibleIndex = 0 });
            //設置樹控制項的層次關係及屬性
            tree.KeyFieldName = "Id";
            tree.ParentFieldName = "PID";
            this.tree.OptionsBehavior.Editable = false;
            this.tree.OptionsView.EnableAppearanceOddRow = true;
            this.tree.OptionsView.EnableAppearanceEvenRow = true;
            this.tree.OptionsDragAndDrop.DragNodesMode = DragNodesMode.None;//不允許拖動

而使用擴展函數的時候,可以簡化它的調用方式,並比較直觀的處理。

       /// <summary>
        /// 初始化樹控制項
        /// </summary>
        private void InitTree()
        {
            this.tree.Columns.Clear();
            this.tree.OptionsDragAndDrop.DragNodesMode = DragNodesMode.None;//不允許拖動

            //控制項擴展函數封裝處理
            this.tree.CreateColumn("Name", "菜單名稱", 160, true);
            this.tree.InitTree("Id", "PID", null, false, false);

詳細瞭解這個處理,可以參考隨筆《在Winform開發框架中使用DevExpress的TreeList和TreeListLookupEdit控制項

有時候,我們還可以結合資料庫處理,對擴展函數進行一定的封裝處理,如下代碼所示。

        /// <summary>
        /// 綁定下拉列表控制項為指定的數據字典列表
        /// </summary>
        /// <param name="combo">下拉列表控制項</param>
        /// <param name="dictTypeName">數據字典類型名稱</param>
        /// <param name="defaultValue">控制項預設值</param>
        public static void BindDictItems(this ComboBoxEdit combo, string dictTypeName, string defaultValue)
        {            
            Dictionary<string, string> dict = BLLFactory<DictData>.Instance.GetDictByDictType(dictTypeName);
            List<CListItem> itemList = new List<CListItem>();
            foreach (string key in dict.Keys)
            {
                itemList.Add(new CListItem(key, dict[key]));
            }

            BindDictItems(combo, itemList, defaultValue);            
        }

用的時候,就非常簡單了,如下代碼是實際項目中對字典列表綁定的操作,字典數據在字典模塊裡面統一定義的。

/// <summary>
/// 初始化數據字典
/// </summary>
private void InitDictItem()
{
    txtInDiagnosis.BindDictItems("入院診斷");
    txtLeaveDiagnosis.BindDictItems("最後診斷");

    //初始化代碼
    this.txtFollowType.BindDictItems("隨訪方式");
    this.txtFollowStatus.BindDictItems("隨訪狀態");
}

這樣就非常簡化了我們對字典數據源的綁定操作了,非常方便易讀,下麵是其中一個功能界面的下拉列表展示。

 

擴展函數的功能主要即使便於我們對一些常規類型的對象進行快速的操作,因此積累豐富的擴展類庫,可以提高我們的開發能力,同時也可以給我們提供很好的參考,有時候可以把一些新的內容加入到已有的擴展函數中去,隨著逐漸對對象的處理函數更加熟悉,我們就會更加嫻熟的使用它們。 

主要研究技術:代碼生成工具、會員管理系統、客戶關係管理軟體、病人資料管理軟體、Visio二次開發、酒店管理系統、倉庫管理系統等共用軟體開發
專註於Winform開發框架/混合式開發框架Web開發框架Bootstrap開發框架微信門戶開發框架的研究及應用
  轉載請註明出處:
撰寫人:伍華聰  http://www.iqidi.com 
    

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、類的封裝: 封裝將類的信息隱藏在類內部,不允許外部直接修改該類的變數,只能通過該類提供的方法來實現對隱藏信息的操作和訪問 class Boss(): # 類的公共屬性 level=1 # 類的初始化(構造方法),在類實例化時自動調用。 def __init__(self,name,hp,sp,a ...
  • 又到了每日分享Python小技巧的時候了,今天給大家分享如何實現視頻、音樂、圖片下載自由的教程吧,我自己覺得灰常好用,所以把它分享給大家,因為好東西需要大家一起學。 1、實戰效果 •接下來下冰冰圖片 you-get https://inews.gtimg.com/newsapp_bt/0/13122 ...
  • 廢話不多說,直接上代碼 from selenium import webdriver from selenium.webdriver import ChromeOptions import time import re from selenium.webdriver.support import e ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 線性數據結構 線性結構是一個有序數據元素的集合。 常用的線性結構 線性表,棧,隊列,雙隊列,串(一維數組)。 非線性數據結構 關於廣義表、數組(高維),是一種非線性的數據結構。 常見的非線性結構有:二維數組,多維數組,廣義表,樹(二叉樹等),圖 線性表(線性存儲結構) 將具有“一對一”關係的數據“線 ...
  • 在 M1 Mac 上開始使用 .NET MAUI 開發 (iOS) 的最簡單方法。 .NET 多平臺應用程式 UI (.NET MAUI) 是一個跨平臺框架,用於使用 C# 和 XAML 創建本機移動和桌面應用程式,這些應用程式可以從單個共用代碼庫在 Android、iOS、macOS 和 Wind ...
  • 一 SECS-II 概述 SECS-II 標准定義了使用如SECS-I、HSMS等傳輸協議在設備和主機之間交換的消息的形式和含義。 定義了以消息的形式在設備和主機之間傳遞信息,消息按其行為分類,稱為Stream。有很多不同的行為Stream,每個Stream又包括具體的消息,稱為Function。 ...
  • CSV(Comma Separated Values)文件是一種純文本文件,包含用逗號分隔的數據,常用於將數據從一個應用程式導入或導出到另一個應用程式。通過將CSV文件轉為EXCEL,可執行更多關於數據編輯、格式設置等操作。下麵,將通過C#及VB.NET代碼展示如何來實現轉換。 一、程式環境 可通過 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...