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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

如何通過反射調(diào)用帶有ref或者out的參數(shù)的方法[遷移]

2019-11-17 03:52:49
字體:
供稿:網(wǎng)友
原帖放在GCDN上,由于GCDN做了整合調(diào)整,現(xiàn)在關(guān)注產(chǎn)品交流等原因GCDN Blog關(guān)閉了,只好把一些有用點(diǎn)的搬過來了。

2009年8月13日 12:29 by winking

寫這篇博客,原起今天CyljXu問我一個(gè)問題:如何通過反射調(diào)用帶有ref或者out的參數(shù)的方法?想著可能其他人也會遇到這個(gè)問題,權(quán)且記錄下來,以備后行者搜索到。

這個(gè)在MSDN上有解釋,參考 MethodBase.Invoke方法 。


public Object Invoke(    Object obj,    Object[] parameters)


Visual C++
public
: virtual Object^ Invoke( Object^ obj, arrayJ#
public
final Object Invoke( Object obj, Object[] parameters )
JScript
public
final
function
Invoke( obj : Object, parameters : Object[] ) : Object
參數(shù)
obj 類型:System.Object

對其調(diào)用方法或構(gòu)造函數(shù)的對象。如果方法是靜態(tài)的,則忽略此參數(shù)。如果構(gòu)造函數(shù)是靜態(tài)的,則此參數(shù)必須為 null 引用(在 Visual Basic 中為 Nothing ) 或定義該構(gòu)造函數(shù)的類的實(shí)例。

parameters 類型: System.Object[]

調(diào)用的方法或構(gòu)造函數(shù)的參數(shù)列表。這是一個(gè)對象數(shù)組,這些對象與要調(diào)用的方法或構(gòu)造函數(shù)的參數(shù)具有相同的數(shù)量、順序和類型。如果沒有任何參數(shù),則 parameters 應(yīng)為 null 引用(在 Visual Basic 中為 Nothing ) 。

如果此實(shí)例所表示的方法或構(gòu)造函數(shù)采用 ref 參數(shù)(在 Visual Basic 中為 ByRef ),使用此函數(shù)調(diào)用該方法或構(gòu)造函數(shù)時(shí), 該參數(shù)不需要任何特殊屬性 。如果數(shù)組中的對象未用值來顯式初始化,則該對象將包含該對象類型的默認(rèn)值。對于引用類型的元素,該值為 null 引用(在 Visual Basic 中為 Nothing ) 。對于值類型的元素,該值為 0、0.0 或 false ,具體取決于特定的元素類型。

那么該如何調(diào)用并處理傳值呢?請看如下示例:

1 class PRogram 2 { 3     static void Main(string[] args) 4     { 5         string content = "main"; //#1 variable 6          MethodInfo testMethod = typeof(Program).GetMethod("TestMethod", 7             BindingFlags.Static | BindingFlags.NonPublic); 8         if (testMethod != null) 9         {10             // Following way can not take content back.11             // -------------------------------------12              testMethod.Invoke(null, new object[] { content /* #1 variable */ });13             Console.WriteLine(content); // #1 variable, Output is: main14             // -------------------------------------15   16 17             object[] invokeArgs = new object[] { content /* #1 variable */ };18             testMethod.Invoke(null, invokeArgs);19             content = (string)invokeArgs[0]; // #2 variable, bypass from invoke, set to content.20              Console.WriteLine(content); // #2 variable, Output is: test21          }22     }23 24     static void TestMethod(ref string arg)25     {26         arg = "test"; // #2 variable, wanna bypass to main process.27      }28 }

To be the apostrophe which changed “Impossible” into “I’m possible”
----------------------------------------------------
WinkingZhang's Blog (http://winkingzhang.VEVb.com)
GCDN(http://gcdn.grapecity.com/cs)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 昆明市| 滕州市| 宜都市| 休宁县| 吉林省| 安义县| 江达县| 连州市| 内江市| 永定县| 松阳县| 三原县| 巢湖市| 平定县| 华宁县| 长岭县| 阳西县| 教育| 绿春县| 平遥县| 万载县| 会泽县| 南木林县| 榆林市| 宾川县| 富源县| 株洲市| 汕尾市| 始兴县| 东安县| 东源县| 东乌珠穆沁旗| 甘肃省| 宁德市| 德阳市| 四子王旗| 达日县| 卢龙县| 长兴县| 丹江口市| 喀喇|