国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 钟山县| 永福县| 炉霍县| 方城县| 玉门市| 襄垣县| 石家庄市| 台南市| 淳安县| 定西市| 当涂县| 田林县| 屏东县| 柏乡县| 林州市| 西安市| 碌曲县| 花莲市| 红安县| 洞头县| 大新县| 舟山市| 怀柔区| 班戈县| 博兴县| 西乌| 江都市| 大邑县| 遵化市| 淮安市| 泸州市| 江油市| 西平县| 弋阳县| 青岛市| 中卫市| 建湖县| 扶沟县| 炎陵县| 炎陵县| 荣成市|