1. 程式人生 > >C# -- 擴充套件方法的應用(Extension Methods)

C# -- 擴充套件方法的應用(Extension Methods)

當你有下面這樣一個需求的時候,擴充套件方法就會起到作用:在專案中,類A需要新增功能,我們想到的就是在類A中新增公共方法,這個顯而易見肯定可以,但是由於某種原因,你不能修改類A本身的程式碼,但是確實又需要增加功能到類A中去,怎麼辦? 這個時候擴充套件方法(Extension Methods)就會幫助你完成上述功能了。現在舉例如下:

類A:簡單起見,類A中只有一個自己的方法。

using System;

namespace TestApp.Method
{
    public class Test
    {
        public void TestMethod()
        {
            Console.WriteLine("public void TestMethod()");
        }
    }
}

現在我需要讓類A新增一個方法,但是又不能修改類A,好,那我們就新增一個擴充套件方法(Extension Methods)如下:

using System;
using TestApp.Method;

namespace TestApp.ExtensionMethod
{
    public static class ExtendClass
    {
        public static void ExtendMethod(this Test test)
        {
            Console.WriteLine("test.ExtendMethod()");
        }
    }
}

其實,擴充套件方法(Extension Methods)當然需要一個類包裝,所以我們必須得有一個類,請注意,這個類必須是靜態類,另外擴充套件方法(Extension Methods)必須也是靜態方法,方法的引數中必須要有被擴充套件類作為其中一個引數,此引數前面用this關鍵字修飾。

好了,這樣我們的擴充套件就算完成了,下面我們就可以通過類A的例項來呼叫這個擴充套件方法了,如下:

using System;
using TestApp.ExtensionMethod;
using TestApp.Method;

namespace TestApp
{
        static void Main(string[] args)
        {
            Test test = new Test();
            test.TestMethod();      // Call the method of itself
            test.ExtendMethod();    // Call the extension method
         }
}

這裡只要using擴充套件方法(Extension Methods)所在名稱空間既可以通過類A的例項來呼叫這個擴充套件方法(Extension Methods)了。

另外MSDN有一篇文章專門講這個的,大家可以去看看: Extension Methods 。

相關推薦

C# -- 擴充套件方法應用Extension Methods

當你有下面這樣一個需求的時候,擴充套件方法就會起到作用:在專案中,類A需要新增功能,我們想到的就是在類A中新增公共方法,這個顯而易見肯定可以,但是由於某種原因,你不能修改類A本身的程式碼,但是確實又需要增加功能到類A中去,怎麼辦? 這個時候擴充套件方法(Extension

C#擴充套件方法示例this關鍵字

        擴充套件方法能夠向現有型別“新增”方法,而無需建立新的派生型別、重新編譯或以其他方式修改原始型別。擴充套件方法是一種特殊的靜態方法,但可以像擴充套件型別上的例項方法一樣進行呼叫。C#擴充套件方法第一個引數指定該方法作用於哪個型別,並且該引數以

C#組合鍵應用Ctrl+Enter

private void textbox_KeyDown(object sender, KeyEventArgs e) { // 如果按下組合鍵CTRL+Enter if (e.KeyDa

C#設計模式(3)——工廠方法模式Factory Method

tor 對象 設計 黃色 post creator log clas 抽象工廠 在簡單工廠模式中通過工廠Factory獲取不同的對象,但是有一個明顯的缺點——簡單工廠模式系統難以擴展! 一旦添加新產品就不得不修改簡單工廠方法,這樣就會造成簡單工廠的實現邏輯過於復雜, 可以通

24.C語言最全排序方法小結不斷更新

http 希爾 找到 sin -s arr span 計算機 gpo 希爾排序: 該方法的基本思想是:先將整個待排元素序列切割成若幹個子序列(由相隔某個“增量”的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全

C語言判斷素數求素數兩種方法第二種沒看懂Kkkkk有空一定搞明白非原創

素數又稱質數。所謂素數是指除了 1 和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被 2~16 的任一整數整除。 思路1):因此判斷一個整數m是否是素數,只需把 m 被 2 ~ m-1 之間的每一個整數去除,如果都不能被整除,那麼 m 就是一個素數。 思路2):另

資料結構篇:鏈棧應用括號匹配C++

很簡單,掌握棧的基礎知識即可。 #include <iostream> #include <string.h> using namespace std; struct Node { int data; Node *next; }; class

如何使用C擴充套件功能-78K0callt/callf

在NEC的微控制器裡面,有兩塊比較特殊的區域,一個是從40H-7FH;另一塊是800H-FFFH。前一塊區域叫做CALLT區域,後一塊區域叫做CALLF區域。 我們先不管這兩塊名字的由來,因為就個人來看,名字完全是當年起名人的一時興致使然。 說一下這兩兩個函式的

斷言方法Assert Methods

Junit 4 斷言方法允許檢查測試方法的期望結果值和真實返回值。Junit的org.junit.Assert類提供了各種斷言方法來寫junit測試。這些方法被用來檢查方法的真實結果值和期望值。下列一些有用的斷言方法列表: Junit 4 Assert Methods

[Swift通天遁地]五、高階擴充套件-(7)UIView檢視型別的各種擴充套件方法

本文將演示檢視型別(UIView)在frame/約束/旋轉/縮放/圓角/各種手勢等一些實用擴充套件方法。 首先確保在專案中已經安裝了所需的第三方庫。 點選【Podfile】,檢視安裝配置檔案。 1 platform :ios, '12.0' 2 use_frameworks! 3 4 ta

[Swift通天遁地]五、高階擴充套件-(8)ImageView影象檢視的各種擴充套件方法

本文將演示影象和影象檢視在下載、壓縮、裁剪方面的擴充套件。 首先確保在專案中已經安裝了所需的第三方庫。 點選【Podfile】,檢視安裝配置檔案。 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5

獲取當前時間戳和隨機數的獲取、Java Random、ThreadLocalRandom、UUID類中的方法應用隨機數

(一)獲取時間戳:第一種方法:var timestamp = Date.parse(new Date());結果:1280977330000第二種方法:var timestamp = (new Date()).valueOf();結果:1280977330748第三種方法:v

windows下安裝python的C擴充套件編譯環境解決“Unable to find vcvarsall.bat”

N久沒有開始寫部落格了,總覺得要隨便記點東西,歲月蹉跎,曾經搞得一些東西、技術、工具,說丟也就丟了,點點滴滴還是要記錄一下吧。。。    在windows下使用pip安裝一些python的第三方庫,有很多使用C寫了一些擴充套件,需要使用VC++ Compiler 來

c# 獲得網路時間GMT格式並轉化為本地時間的方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Windows.Forms; //獲得當

C# 設計模式模板方法模式unity演示

1、引言    說到模板,我們很容易想到生活中的例子,像“簡歷模板”、“論文模板”、“競選模板”等。而這些模板有一個共同的特徵就是,它們有一個約定俗成的格式,我們能可以拿著這些模板按照我們自己的實際情況來填寫裡面的內容。像“簡歷模板”就是個十分常

整合方法,或者叫做組合方法Ensemble methods介紹

整合方法的思想就是將若干個分類器組合起來(或者把一種演算法的不同引數組合到一起),以改進各單個分類器的效果。整合方法大致分兩類: 1. Averaging methods(平均方法): 就是利用訓練資料的全集或者一部分資料訓練出幾個演算法或者一個演算法的幾個引數,最終的演算

C# Linq擴充套件方法應用

Linq中存在大量的擴充套件方法。在System.Linq名稱空間中,存在兩個使用極其廣泛的類Enumerable和Queryable,它們中就含有許許多多的擴充套件方法。擴充套件方法最重要的用途之

redis 在 php 中的應用string篇

否則 發現 版本 com 偏移量 .html incrby his num 本文為我閱讀了 redis參考手冊 之後結合 博友的博客 編寫,註意 php_redis 和 redis-cli 的區別(主要是返回值類型和參數用法) 上一篇:redis 在 php 中

redis 在 php 中的應用List篇

color .com 博客 長度 多個 列表 conn ref ron 本文為我閱讀了 redis參考手冊 之後結合 博友的博客 編寫,註意 php_redis 和 redis-cli 的區別(主要是返回值類型和參數用法) 目錄: 一、List(列表) 1、LPUS

redis 在 php 中的應用Set篇

之間 進行 group center 集合運算 返回 world cut 數據 上一篇:redis 在 php 中的應用(List篇) 本文為我閱讀了 redis參考手冊 之後編寫,註意 php_redis 和 redis-cli 的區別(主要是返回值類型和參數用法) Re