国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:48:44
字體:
供稿:網(wǎng)友

前言

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

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

反射的用途:

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

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

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

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

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

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

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

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

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

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

比如我們有這樣的類型:

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

那么反射的時候可以使用:

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

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

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黎川县| 灌南县| 泗水县| 静乐县| 安徽省| 淮阳县| 晋宁县| 本溪市| 吴江市| 阳山县| 新昌县| 南投县| 阿坝县| 白朗县| 耒阳市| 北辰区| 廉江市| 灵宝市| 始兴县| 海林市| 松江区| 双柏县| 台前县| 房山区| 布拖县| 龙州县| 正镶白旗| 灌云县| 新竹市| 株洲市| 深圳市| 巴中市| 北京市| 汤原县| 平江县| 红桥区| 孟津县| 盐池县| 延川县| 台中市| 五大连池市|