23桑涎、擴展方法

1.定義:

  擴展方法使你能夠向現有類型“添加”方法,而無需創(chuàng)建新的派生類型周伦、重新編譯或以其他方式修改原始類型郑现。 擴展方法是一種特殊的靜態(tài)方法湃崩,但可以像擴展類型上的實例方法一樣進行調用。

2.定于擴展方法

Personl類的定義

    public class Person
    {
        public string name;

        public override string ToString()
        {
            return this.name;
        }
    }

為Person類擴展方法

    public static class MethedExt
    {
        //擴充不帶參數的方法
        public static void SayHellow(this Person obj)
        {
            Console.WriteLine("Say Hellow" + obj.name);
        }
        
        //擴充一個帶參數的方法
        public static void ChangeName(this Person obj, string name)
        {
            obj.name = name;
        }
    }

擴展方法被定義為靜態(tài)方法接箫,但它們是通過實例方法語法進行調用的攒读。 它們的第一個參數指定該方法作用于哪個類型,并且該參數以 this 修飾符為前綴辛友。

3. 調用擴展方法

            Person p1 = new Person();
            p1.name = "asdasd";
            p1.sayHellow();
            p1.ChangeName("張三");

在代碼中薄扁,可以使用實例方法語法調用該擴展方法。 但是废累,編譯器生成的中間語言 (IL) 會將代碼轉換為對靜態(tài)方法的調用邓梅。 因此,并未真正違反封裝原則邑滨。 實際上日缨,擴展方法無法訪問它們所擴展的類型中的私有變量。

定義和調用擴展方法注意點

  • 定義一個靜態(tài)類以包含擴展方法掖看。
  • 將該擴展方法實現為靜態(tài)方法殿遂,并使其至少具有與包含類相同的可見性诈铛。
  • 該方法的第一個參數指定方法所操作的類型;該參數必須以 this修飾符開頭墨礁。
  • 按照與調用類型上的實例方法一樣的方式調用擴展方法。
  • 只能擴展對象類

4 為接口添加擴展方法

接口定義

    public interface Interface1
    {
        void test1();

    }

為接口擴展方法

     public static class MethedExt
    {
        public static void test2(this Interface1 iter)
        {
            Console.WriteLine("test2");
        }
     }

實現接口中的方法

    public class Person : Interface1
    {
        public string name;
        private int age;

        public override string ToString()
        {
            return this.name;
        }

        public void test1()
        {

        }
    }

調用擴展的接口方法

        static void Main(string[] args)
        {
            Person p1 = new Person();
            p1.name = "asdasd";
            p1.test2();
        }

5耳峦、使用注意

可以使用擴展方法來擴展類或接口恩静,但不能重寫擴展方法。
與接口或類方法具有相同名稱和簽名的擴展方法永遠不會被調用蹲坷。
編譯時驶乾,擴展方法的優(yōu)先級總是比類型本身中定義的實例方法低。 換句話說循签,如果某個類型具有一個名為 SayHellow()的方法级乐,而你有一個具有相同簽名的擴展方法,則編譯器總是綁定到該實例方法县匠。 當編譯器遇到方法調用時风科,它首先在該類型的實例方法中尋找匹配的方法。 如果未找到任何匹配方法乞旦,編譯器將搜索為該類型定義的任何擴展方法贼穆,并且綁定到它找到的第一個擴展方法。

牢記一點: 如果擴展方法與該類型中定義的方法具有相同的簽名兰粉,則擴展方法永遠不會被調用故痊。

6、一點建議:

通常玖姑,建議你只在不得已的情況下才實現擴展方法愕秫,并謹慎地實現。 只要有可能焰络,必須擴展現有類型的客戶端代碼都應該通過創(chuàng)建從現有類型派生的新類型來達到這一目的戴甩。
在使用擴展方法來擴展你無法更改其源代碼的類型時,你需要承受該類型實現中的更改會導致擴展方法失效的風險舔琅。

7等恐、小練習

int[]擴充一個方法,調用這個方法备蚓,可以實現打印數組中的元素

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末课蔬,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子郊尝,更是在濱河造成了極大的恐慌二跋,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件流昏,死亡現場離奇詭異扎即,居然都是意外死亡吞获,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門谚鄙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來各拷,“玉大人,你說我怎么就攤上這事闷营】臼颍” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵傻盟,是天一觀的道長速蕊。 經常有香客問我,道長娘赴,這世上最難降的妖魔是什么规哲? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮诽表,結果婚禮上唉锌,老公的妹妹穿的比我還像新娘。我一直安慰自己关顷,他們只是感情好糊秆,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著议双,像睡著了一般痘番。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上平痰,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天汞舱,我揣著相機與錄音,去河邊找鬼宗雇。 笑死昂芜,一個胖子當著我的面吹牛,可吹牛的內容都是我干的赔蒲。 我是一名探鬼主播泌神,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舞虱!你這毒婦竟也來了欢际?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤矾兜,失蹤者是張志新(化名)和其女友劉穎损趋,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體椅寺,經...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡浑槽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年蒋失,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桐玻。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡篙挽,死狀恐怖,靈堂內的尸體忽然破棺而出畸冲,到底是詐尸還是另有隱情嫉髓,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布邑闲,位于F島的核電站,受9級特大地震影響梧油,放射性物質發(fā)生泄漏苫耸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一儡陨、第九天 我趴在偏房一處隱蔽的房頂上張望褪子。 院中可真熱鬧,春花似錦骗村、人聲如沸嫌褪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笼痛。三九已至,卻和暖如春琅拌,著一層夾襖步出監(jiān)牢的瞬間缨伊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工进宝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刻坊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓党晋,卻偏偏與公主長得像谭胚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子未玻,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容

  • 1 簡介: 擴展方法使你能夠向現有類型“添加”方法灾而,而無需創(chuàng)建新的派生類型、重新編譯或以其他方式修改原始類型深胳。 擴...
    元宇宙協(xié)會閱讀 11,547評論 4 5
  • 1 簡介: 擴展方法使你能夠向現有類型“添加”方法舞终,而無需創(chuàng)建新的派生類型轻庆、重新編譯或以其他方式修改原始類型癣猾。 擴...
    silence_k閱讀 311評論 2 3
  • 女媧造人的故事 女媧造人的故事大家都非常熟悉,我們通過這一場景來學習工廠模式(例子很好余爆,就是內容有點胡扯)纷宇。首先,...
    stayiwithime閱讀 1,341評論 0 0
  • 命名空間 對長期從事objective-c語言開發(fā)的我們來說蛾方,命名空間可能是一個比較陌生的名稱像捶。 “命名空間”,簡...
    SevenPa閱讀 1,098評論 1 9
  • 16宿命:用概率思維提高你的勝算 以前的我是風險厭惡者桩砰,不喜歡去冒險拓春,但是人生放棄了冒險,也就放棄了無數的可能亚隅。 ...
    yichen大刀閱讀 6,041評論 0 4