欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:C#之?dāng)U展方法詳解

柚子快報(bào)激活碼778899分享:C#之?dāng)U展方法詳解

http://yzkb.51969.com/

前言:

我們想要向一個類型中添加方法,可以通過以下兩種方式:

1.修改源代碼。

2.在派生類中定義新的方法。

但是這兩種方式都有缺點(diǎn),1如果是別人的代碼,你對其直接進(jìn)行修改,可能破壞代碼的完整性,使代碼無法編譯,2會增加代碼的維護(hù)成本,修改功能時父類子類可能都要修改

1.擴(kuò)展方法概述和基本準(zhǔn)則

(1).C#只支持?jǐn)U展方法,不支持?jǐn)U展屬性、擴(kuò)展事件、擴(kuò)展操作符等。

?(2).擴(kuò)展方法(第一個參數(shù)前面是this的方法)必須在非泛型的靜態(tài)類中聲明,擴(kuò)展方法必須有一個參數(shù),而且只有第一個參數(shù)使用this標(biāo)記。

?(3).用一個擴(kuò)展方法擴(kuò)展一個類型時,同時也擴(kuò)展了派生類型。?

2.擴(kuò)展方法應(yīng)用

namespace HelloWorld//命名空間

{

public class Student

{

public void FunctionA()

{

Console.WriteLine("我是方法A");

}

}

public static class Extension

{

public static void FunctionB(this Student myStudent, int a)

{

Console.WriteLine("我是Student類的擴(kuò)展方法B,參數(shù)是" + a);

}

}

class ExtMethodDemo

{

static void Main(string[] args)

{

Student a=new Student();

a.FunctionB(5);

}

}

}

打印結(jié)果:

擴(kuò)展方法擴(kuò)展的不僅僅可以是引用類型,也可以是值類型,附帶一個官方的例子

3.擴(kuò)展方法本質(zhì)

?????????“擴(kuò)展方法”是C#獨(dú)有的一種方法,在擴(kuò)展方法中會使用ExtensionAttribute這個attribute。

????????C#一旦使用this關(guān)鍵字標(biāo)記了某個靜態(tài)方法的第一個參數(shù),編譯器就會在內(nèi)部向該方法應(yīng)用一個定制的attribute,這個attribute會在最終生成的文件的元數(shù)據(jù)中持久性的存儲下來,此屬性在System.Core dll程序集中。

????????任何靜態(tài)類只要包含了至少一個擴(kuò)展方法,它的元數(shù)據(jù)中也會應(yīng)用這個attribute,任何一個程序集包含了至少一個符合上述特點(diǎn)的靜態(tài)類,它的元數(shù)據(jù)也會應(yīng)用這個attribute。如果代碼用了一個不存在的實(shí)例方法,編譯器會快速的掃描引用的所有程序集,判斷它們哪些包含了擴(kuò)展方法,然后,在這個程序集中,可以掃描包含了擴(kuò)展方法的靜態(tài)類。

????????如果同一個命名空間中的兩個類含有擴(kuò)展類型相同的方法,就沒有辦法做到只用其中一個類中的擴(kuò)展方法。為了通過類型的簡單名稱(沒有命名空間前綴)來使用類型,可以導(dǎo)入該類型所有在的命名空間,但這樣做的時候,你沒有辦法阻止那個命名空間中的擴(kuò)展方法也被導(dǎo)入進(jìn)來。

就比如說:

  當(dāng)編譯看到以上述代碼,編譯器分兩步工作:

  (1) 編譯器檢查a當(dāng)前類型,也就是Student類以及Student任何基類是否具有所匹配的名為FunctionB包含一個int參數(shù)的函數(shù),如果找到,則生成IL代碼并Call它;

  (2)?如果沒有找到匹配的方法,就繼續(xù)檢查是否有任何靜態(tài)類定義了名為FunctionB的靜態(tài)方法,并且這個方法必須第一個參數(shù)是用this關(guān)鍵字修飾,參數(shù)類型為Student的。找到時生成相應(yīng)的IL代碼來調(diào)用它。

? ? ? ? 所以也解釋了為什么擴(kuò)展類必須是靜態(tài)非泛型的,因?yàn)槟惚仨毐WC在編譯階段,Student能找到它匹配的方法,而泛型是在程序運(yùn)行時才能確定方法。

官方文檔鏈接:擴(kuò)展方法 - C# 編程指南 - C# | Microsoft Learn

參考鏈接:https://www.cnblogs.com/yuer20180726/p/10901123.html

柚子快報(bào)激活碼778899分享:C#之?dāng)U展方法詳解

http://yzkb.51969.com/

文章鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18939327.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄