C#中增量類功能的方式之 繼承與擴展

来源:https://www.cnblogs.com/taotaozhuanyong/archive/2019/09/18/11541993.html
-Advertisement-
Play Games

之前一次公司培訓的時候,將它記錄下來,https://www.cnblogs.com/AlvinLee/p/10180536.html這個博客上面比較全面。 1、擴展方法 擴展方法時一種特殊的靜態方法,可以像該類的實例方法一樣使用,能夠在不添加新的派生類,重新編譯的秦光霞,向現有類添加功能 註意事項 ...


之前一次公司培訓的時候,將它記錄下來,https://www.cnblogs.com/AlvinLee/p/10180536.html這個博客上面比較全面。

1、擴展方法

  擴展方法時一種特殊的靜態方法,可以像該類的實例方法一樣使用,能夠在不添加新的派生類,重新編譯的秦光霞,向現有類添加功能

  註意事項:

    a、必須定義在非泛型靜態類中

    b、必須是public的靜態方法,並且第一個方法必須使用this關鍵字修飾

    c、使用using關鍵字顯示導入擴展方法命名空間後才能使用

    d、實例方法優先於擴展方法執行

    e、可以在空引用上調用擴展方法

    f、擴展方法可以被繼承

2、partial

  partial關鍵字拆分一個類、結構、介面、方法的定義至多個文件中,每個源文件中包含類型或方法定義的一部分,在編譯時被組合成一個完整的類。

  使用場景:

    a、一個類分佈於多個獨立文件中跨域讓多位程式員同事對該類進行處理

    b、當使用自動生成文件的源文件時,將自動生成的代碼與手動添加的代碼分佈在不同文件

  註意事項:

    a、不分類的哥哥不分必須具有相同的可訪問性

    b、如果將任意不分聲明為抽象類

    c、如果任意部分聲明瞭其基類型,則整個類繼承該類

    d、部分類的各個部分都必須在同一程式集和同一模塊(.exe 或 .dll 文件)中進行定義。

    e、部分方法必須以partial開頭,不能包含out參數,不能為virtual方法,返回值必須為void

    f、可以為已定義並實現的分部方法生成委托,但不能為已經定義但未實現的分部方法生成委托

3、繼承

  a、面向對象的三大特征之一

  b、通過繼承可以重用、擴展、修改積累中的行為

  c、基類具有傳遞性

  Struct結構是否支持繼承?

  如何防止類被進一步派生?

  如何在派生類中隱藏類成員?

  繼承缺點:

    a、類只支持單繼承

    b、破壞封裝,子類與父類之間緊密耦合,子類依賴於父類的實現,子類缺乏獨立性,基類細節對派生類可見

    c、子類不能改變父類的介面

    e、不支持動態繼承,在運行時,子類無法選擇不同的父類

4、繼承之模板方法

  定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可沖定義該演算法的某些特定步驟

  使用場景:

    a、有多個子類共有的方法,且邏輯相同

    b、重要的、複雜的方法,可以考慮作為模板方法

  優點:

    a、封裝不變不分,擴展可變不分

    b、提取公共代碼,便於維護

    c、行為由父類控制,子類實現

  缺點:

    每一個不同的實現都需要一個子類來實現,導致類的個數增加,使得系統更加龐大。

5、組合

  什麼是組合?

    組合是通過對現有的對象進行拼裝(組合)產生新的、更複雜的功能

  優點:

    a、不破壞封裝,整體類與局部類之間松耦合,彼此相互獨立

    b、支持動態組合,在運行時可以設置不同的局部實現

    c、整體可以對局部類進行包裝,封裝局部類的介面,提供新的介面

  缺點:

    a、創建整體類的對象時,需要創建所有局部類的對象

    b、設計複雜度增高

6、建造者模式(在後續的文章中,會詳細描述下設計模式)

  建造者模式將一個複雜的構建與其表示相分離,是的同樣的構建過程可以創建不同的表示

  主要角色:

    a、控制者(Director):控制對象的組合過程

    b、構建者(Builder):構建者介面,定義構建各部件的方法。

    c、實際構建者(ConcreteBuilder):具體構建出各部件對象,獲得構造結構。

    d、被創建者(Product):構建者操作的主要對象

  使用場景:

    a、被創建者對象由很多組件構成,他們之前創建的順序不變,但是組件的創建細節不一致

    b、被創建者對象具有複雜的內部結構

    c、被創建者對象內部屬性本身相互依賴

  優點:

    a、建造者獨立,易擴展

    b、便於控制細節風險

  缺點:

    a、產品必須有共同點,範圍有限制

    b、內部變化複雜,會有很多的建造類


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

-Advertisement-
Play Games
更多相關文章
  • html 顯示 pdf文件四種方式: 1、 2、 3、 4、 ...
  • 在我們做官網中經常會在網頁中插入百度地圖,這個其實挺簡單的,下麵跟著步驟一步步來。 1.進入百度創建地圖的網站 http://api.map.baidu.com/lbsapi/creatmap/ 2.看到圖中第一步的下麵有1,2,3三個小步驟,打開1.定位中心點→切換裡面的城市按鈕,選擇你要展示的城 ...
  • 這是今天在寫vue項目時發生的一個小問題,在此記錄一下,方便自己的回顧。項目是前後端分離的,前臺主要使用了vue-cli3.0 + mintui,是一個移動端的web app包括了後臺發佈管理的一些功能,其他就先不介紹了,項目後期方便的話我會截取一些代碼發佈在我的github上,自己也是第一次嘗試用 ...
  • if(window.plus)//判斷當前的設備是手機 window.localStorage.setItem("key","value");//設置值 window.localStorage.getItem("key");//獲取值 ...
  • 抄寫多語言組件,基於ice-plugin-fusion為iceworks的“ICE Design Pro”實現一個多主題切換功能 ...
  • JavaScript比較當前時間是否在指定時間段內,js 判斷當前時間(或者所選時間)是否在某一時間段 ...
  • 背景 從第一臺電腦誕生到現在已經七十多年了,電腦已經和我們的生活息息相關,很多小伙伴上來就接觸高端設備,電腦過去是怎麼發展起來的,我覺得還是瞭解一下會比較好,我是歷史愛好者,所以我個人認為學習任何東西都要瞭解它的過去,就像我以前歷史老師跟我說的“不瞭解過去的人,不會瞭解現在和未來”,這篇文章就 ...
  • 場景 我的CSDN: https://blog.csdn.net/BADAO_LIUMANG_QIZHI 實現 馬士兵Java學習視頻 方立勛JavaWeb 尚矽谷Python核心基礎 數據分析 機器學習 MYSQL 500本電子書 機器學習深度學習篇 軟體測試全套教程 Bootsrap 大數據從0 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...