展開
            湖北國聯(lián)計算機科技有限公司
          1. 首頁HOME
          2. 公司簡介INTRODUCTION
          3. 安全防御DEFENSE
          4. 軟件開發(fā)SOFTWARE
          5. 物聯(lián)網(wǎng)IOT
          6. 運行維護SRE
          7. 成功案例CASE
          8. 聯(lián)系我們CONTACT
          9. Software Technology Sharing |技術(shù)分享

            C#中的擴展方法
            來源:荊州網(wǎng)站建設(shè) 時間:2017-05-21

            在java中沒有這樣的東西,一個類一旦是 final的,這個類就不能再被添加方法,但是C#能夠做到,可以給 sealed 類添加新的方法,這點我還是比較喜歡c#的。

            這就是C#中的擴展方法。

            那么什么情況下我們才需要去給一個類寫擴展方法呢?

            系統(tǒng)自帶的類型,我們無法去修改;

            修改源代碼需要較大的精力,而且可能會帶來錯誤;

            我們只是需要一個或者較少的幾個方法,修改源代碼費時費力;

            被擴展的類是sealed的,不能被繼承;(就算不是sealed的,我們也不能因為需要一個方法而去寫一個子類,這樣不是面向?qū)ο螅?/p>

            下面是擴展方法的三個要素:(也算是語法規(guī)則)

            擴展方法必須處于一個靜態(tài)類中;

            擴展方法必須是一個靜態(tài)方法;

            擴展方法的參數(shù)列表必須以 this 開頭,this 后面緊跟的是被擴展類,然后才是方法需要的參數(shù);

            下面就舉一個栗子:

            我們一般將字符串類型的數(shù)字轉(zhuǎn)換為int類型,一般都是用的 int.Parse() 方法,或者 Convert類的方法,我們能不能給 string 類型添加一個 Parse方法呢?

            當然是可以的,代碼上來先:(這里只寫了無參數(shù)的擴展方法,有參數(shù)的直接在參數(shù)列表中添加即可,調(diào)用時傳遞對應(yīng)參數(shù))

            using System;

            namespace ConsoleApplicationTest

            {

            public static class stringExtensionMethod

            {

            public static int Parse(this string str)

            {

            return int.Parse(str);

            }

            }

            class Program

            {

            static void Main(string[] args)

            {

            string str = "111";

            int i = str.Parse();

            Console.WriteLine("i: " + i);

            }

            }

            }

            復(fù)制代碼

            有一點可能不好理解,為什么參數(shù)列表里面有參數(shù),但是在調(diào)用的時候卻不傳遞參數(shù),對于這點我之前也是有點迷糊,但是想通了就好了,那里不是有個 this 關(guān)鍵字嗎?this指代的就是當前對象嘛,也就是被擴展類的實例,也就是擴展方法的調(diào)用者,既然是調(diào)用者,那還把它當參數(shù)傳,肯定不傳呀。

            下面寫一下擴展方法的特點:

            1、this關(guān)鍵字緊跟著的不是參數(shù),而是調(diào)用者,調(diào)用者后面的參數(shù)才是擴展方法真正的參數(shù),在調(diào)用時必須傳遞;

            2、如果被擴展的類中的實例方法和擴展方法的方法簽名相同(擴展方法中方法的簽名應(yīng)該要去掉this和調(diào)用者參數(shù)),則優(yōu)先調(diào)用本類中的實例方法;

            3、被擴展類(可以是普通類,也可以是接口抽象類)的子類對象可以直接調(diào)用父類的擴展方法,也就是說子類也繼承了父類的擴展方法;

            4、這點算是第 3 點的補充,只有被擴展類的本類對象或者子類對象,才能調(diào)用擴展方法;



            以上由湖北國菱荊州軟件開發(fā)、荊州網(wǎng)站建設(shè)工程師整理發(fā)布。喜歡程序開發(fā)的伙伴們歡迎一起交流探討。Email:business@gl-ns.com,電話:0716-6666211.

            荊州地區(qū)政府網(wǎng)站建設(shè) 解決方案 專業(yè)團隊 騰訊第三方平臺 地址:湖北省荊州市沙市區(qū)荊沙大道楚天都市佳園一期C區(qū)29棟112       地址:湖北省松滋市新江口街道才知文化廣場1幢1146-1151室     郵編:434200 聯(lián)系電話:0716-6666211     網(wǎng)站編輯部郵箱:business@gl-ns.com 鄂公網(wǎng)安備 42100202000212號 備案號:鄂ICP備2021015094號-1     企業(yè)名稱:湖北國菱計算機科技有限公司
            2020国自产拍精品免费观看,国产经典aⅴ三级观看,国产午夜99视频精品免费播放,亚洲开心网激情五月,91久久精品无码,久久综合香蕉久久久久久久,亚洲中亚洲中文字幕无线乱码,在线播放对白太大了 亚太影院 柯西贝尔-游戏赚网