欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET/C#利用反射調(diào)用含ref或out參數(shù)的方法示例代碼

 更新時(shí)間:2018年09月05日 14:11:20   作者:呂毅  
這篇文章主要給大家介紹了關(guān)于.NET/C#利用反射調(diào)用含ref或out參數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

使用反射,我們可以很容易地在運(yùn)行時(shí)調(diào)用一些編譯時(shí)無(wú)法確定的屬性、方法等。在.NET中的反射可以實(shí)現(xiàn)從對(duì)象的外部來(lái)了解對(duì)象(或程序集)內(nèi)部結(jié)構(gòu)的功能,哪怕你不知道這個(gè)對(duì)象(或程序集)是個(gè)什么東西,另外.NET中的反射還可以運(yùn)態(tài)創(chuàng)建出對(duì)象并執(zhí)行它其中的方法。

反射是.NET中的重要機(jī)制,通過(guò)反射,可以在運(yùn)行時(shí)獲得程序或程序集中每一個(gè)類(lèi)型(包括類(lèi)、結(jié)構(gòu)、委托、接口和枚舉等)的成員和成員的信息。有了反射,即可對(duì)每一個(gè)類(lèi)型了如指掌。另外我還可以直接創(chuàng)建對(duì)象,即使這個(gè)對(duì)象的類(lèi)型在編譯時(shí)還不知道。

反射的用途:

(1)使用Assembly定義和加載程序集,加載在程序集清單中列出模塊,以及從此程序集中查找類(lèi)型并創(chuàng)建該類(lèi)型的實(shí)例。

(2)使用Module了解包含模塊的程序集以及模塊中的類(lèi)等,還可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法。

(3)使用ConstructorInfo了解構(gòu)造函數(shù)的名稱、參數(shù)、訪問(wèn)修飾符(如pulic 或private)和實(shí)現(xiàn)詳細(xì)信息(如abstract或virtual)等。

(4)使用MethodInfo了解方法的名稱、返回類(lèi)型、參數(shù)、訪問(wèn)修飾符(如pulic 或private)和實(shí)現(xiàn)詳細(xì)信息(如abstract或virtual)等。

(5)使用FiedInfo了解字段的名稱、訪問(wèn)修飾符(如public或private)和實(shí)現(xiàn)詳細(xì)信息(如static)等,并獲取或設(shè)置字段值。

(6)使用EventInfo了解事件的名稱、事件處理程序數(shù)據(jù)類(lèi)型、自定義屬性、聲明類(lèi)型和反射類(lèi)型等,添加或移除事件處理程序。

(7)使用PropertyInfo了解屬性的名稱、數(shù)據(jù)類(lèi)型、聲明類(lèi)型、反射類(lèi)型和只讀或可寫(xiě)狀態(tài)等,獲取或設(shè)置屬性值。

(8)使用ParameterInfo了解參數(shù)的名稱、數(shù)據(jù)類(lèi)型、是輸入?yún)?shù)還是輸出參數(shù),以及參數(shù)在方法簽名中的位置等。

然而,如果方法的參數(shù)中包含 ref 或 out 關(guān)鍵字的時(shí)候,又該怎么調(diào)用呢?

本文將介紹如何反射調(diào)用含 ref 或 out 關(guān)鍵字的方法。

比如我們有這樣的類(lèi)型:

public class Walterlv
{
 public string Get(string key)
 {
 }
}

那么反射的時(shí)候可以使用:

var walterlv = new Walterlv();
var value = (string) typeof(Walterlv).GetMethod("Get").Invoke(walterlv, new object[] { "key" });

然而現(xiàn)在我們的函數(shù)是這樣的,帶一個(gè) out 關(guān)鍵字的參數(shù):

public class Walterlv
{
 public bool TryGet(string key, out string value)
 {
 }
}

事實(shí)上,無(wú)論是什么樣的方法,在反射式調(diào)用的都是同一個(gè)方法,即 Invoke。

對(duì)于 out 和 ref 關(guān)鍵字的方法來(lái)說(shuō),會(huì)更新傳入的數(shù)組,也就是 Invoke 最后傳入的那個(gè)參數(shù)。所以其實(shí)我們只需要保存那個(gè)數(shù)組的實(shí)例,在調(diào)用完畢之后便能重新取出被修改的參數(shù)了。

var walterlv = new Walterlv();
var args = new object[] { "key", null };
var value = (string) typeof(Walterlv).GetMethod("Get").Invoke(walterlv, args);
// 在這里可以從 args 里面取出被 ref 或者 out 修改的參數(shù)。

參考資料

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • .net數(shù)據(jù)庫(kù)連接池配置技巧(默認(rèn)值)

    .net數(shù)據(jù)庫(kù)連接池配置技巧(默認(rèn)值)

    ado.net 本就有連接功能,所有.net開(kāi)法基本不用去考慮連接問(wèn)題,怪不得.net的連接池資料網(wǎng)上找不到。.net連接池只要在連接字符串里配制就可以了
    2008-12-12
  • ASP.NET Core應(yīng)用錯(cuò)誤處理之ExceptionHandlerMiddleware中間件呈現(xiàn)“定制化錯(cuò)誤頁(yè)面”

    ASP.NET Core應(yīng)用錯(cuò)誤處理之ExceptionHandlerMiddleware中間件呈現(xiàn)“定制化錯(cuò)誤頁(yè)面”

    這篇文章主要給大家介紹了關(guān)于ASP.NET Core應(yīng)用錯(cuò)誤處理之ExceptionHandlerMiddleware中間件呈現(xiàn)“定制化錯(cuò)誤頁(yè)面”的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2019-01-01
  • 運(yùn)用.net core中實(shí)例講解RabbitMQ

    運(yùn)用.net core中實(shí)例講解RabbitMQ

    RabbitMQ是實(shí)現(xiàn)了高級(jí)消息隊(duì)列協(xié)議(AMQP)的開(kāi)源消息代理軟件(亦稱面向消息的中間件),本文詳細(xì)講解了RabbitMQ以及運(yùn)用.net core中實(shí)例講解其6中模式,感興趣的小伙伴一起來(lái)學(xué)習(xí)吧
    2021-09-09
  • Quartz在.NET中的使用教程

    Quartz在.NET中的使用教程

    Quartz是一個(gè)強(qiáng)大、開(kāi)源、輕量級(jí)的任務(wù)調(diào)度框架,支持cron-like表達(dá)式其他一些優(yōu)秀的特性。這篇文章主要介紹了Quartz在.NET中的使用,需要的朋友可以參考下
    2021-12-12
  • 有關(guān).NET參數(shù)傳遞的方式引發(fā)的思考

    有關(guān).NET參數(shù)傳遞的方式引發(fā)的思考

    在.NET中參數(shù)的使用方法主要為可選參數(shù)、命名參數(shù)、可變數(shù)量參數(shù)等等。本文也是主要介紹這三種參數(shù)的使用方法
    2016-12-12
  • DataGridView右鍵菜單自定義顯示及隱藏列功能

    DataGridView右鍵菜單自定義顯示及隱藏列功能

    WinForm程序中表單的列可自定義顯示及隱藏,是一種常見(jiàn)的功能,對(duì)于用戶體驗(yàn)來(lái)說(shuō)是非常好的。這篇文章主要介紹了DataGridView右鍵菜單自定義顯示及隱藏列功能,需要的朋友可以參考下
    2019-11-11
  • ASP.NET Core中使用Swagger

    ASP.NET Core中使用Swagger

    這篇文章介紹了ASP.NET Core中使用Swagger的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • ASP.NET MVC 文件上傳教程(一)

    ASP.NET MVC 文件上傳教程(一)

    這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC 文件上傳教程第一篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • ASP.NET動(dòng)態(tài)生成靜態(tài)頁(yè)面的實(shí)例代碼

    ASP.NET動(dòng)態(tài)生成靜態(tài)頁(yè)面的實(shí)例代碼

    生成靜態(tài)頁(yè)有很多好處,可以緩解服務(wù)器壓力、方便搜索網(wǎng)站搜索等等,下面介紹一下生成靜態(tài)頁(yè)的實(shí)例代碼,有需要的朋友可以參考一下
    2013-07-07
  • MVC+EasyUI+三層新聞網(wǎng)站建立 建站準(zhǔn)備工作(一)

    MVC+EasyUI+三層新聞網(wǎng)站建立 建站準(zhǔn)備工作(一)

    這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第一篇,建站的準(zhǔn)備工作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論