C 擴充套件方法本質

2021-07-01 21:00:01 字數 1088 閱讀 1134

1、擴充套件方法是乙個補丁的概念,在乙個程序(乙個程式集)的範圍內,給某個型別臨時加上方法。

所以擴充套件方法不能寫在巢狀類,應該在程式集的全域性區,這個程式集的頂級類中。

而且要求有二(在static類中,是乙個static方法),this是它和一般的方法的區別符

2、擴充套件方法當然不能破壞物件導向封裝的概念,所以只能是訪問所擴充套件類的public成員。

3.擴充套件方法是靜態方法,是類的一部分,但是實際上沒有放在類的源**中。

4.擴充套件方法所在的類也必須被宣告為static

5.c#只支援擴充套件方法,不支援擴充套件屬性、擴充套件事件等。

6.擴充套件方法的第乙個引數是要擴充套件的型別,放在this關鍵字的後面,告訴編譯期這個方法是money型別的一部分。

7.在擴充套件方法中,可以訪問擴充套件型別的所有公共方法和屬性。

[c-sharp]view plain

copy

using

system;  

using

system.collections.generic;  

using

system.linq;  

using

system.text;  

namespace

blogok  

}  class

program  

#endregion  

}  }  

使用s.fun();這種形式呼叫,更能體現擴充套件的意味

使用extendmethod.fun(s);這種形式呼叫,則更能體現擴充套件方法實現的本質,便於理解為什麼是只能訪問鎖擴充套件型別的public成員。

至於頂級類中、static類、static方法的規定,這是設計如此,應用在個程式集的範圍中,新增新的設計,當然可以在乙個類的範圍內實現臨時擴充套件,技術上是可行的只是意義不大。

linq的實現正是基於擴充套件方法,實現原理為:

在乙個基類上進行擴充套件,一般而言擴充套件方法單獨地建立乙個命名空間,在使用的時候,匯入這個命名空間,則開啟了擴充套件方法的可見性,這個時候,所有子類便可以使用這個擴充套件方法了(因為子類繼承了基類,public,static這樣的許可權級別更是很容易的滿足直接呼叫)

C 擴充套件方法

c 語言從3.0開始增加了乙個很特別的功能 擴充套件方法。那麼擴充套件方法起什麼作用呢?很多時候我們想為已經存在的類擴充套件某些功能,而又沒有必要去繼承該類,甚至有時候這個類根本就不允許繼承,如string類,這時候就可以使用擴充套件方法來為其擴充套件功能。下面舉例說明 一 我們建立乙個類庫如下 c...

C 擴充套件方法

c 語言從3.0開始增加了乙個很特別的功能 擴充套件方法。那麼擴充套件方法起什麼作用呢?很多時候我們想為已經存在的類擴充套件某些功能,而又沒有必要去繼承該類,甚至有時候這個類根本就不允許繼承,如string類,這時候就可以使用擴充套件方法來為其擴充套件功能。下面舉例說明 一 我們建立乙個類庫如下 c...

C 擴充套件方法

使用 net 3.0之後,我一直都覺得有種方法很奇怪,這種方法在一般的方法前面多了乙個藍色的向下箭頭。這種方法其實是擴充套件方法,這種擴充套件方法不需要去修改原類。class program public static class extendfunction 例子中我定義了乙個擴充套件方法,這個方...