麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

如何通過反射調用帶有ref或者out的參數的方法[遷移]

2019-11-17 03:52:49
字體:
來源:轉載
供稿:網友
原帖放在GCDN上,由于GCDN做了整合調整,現在關注產品交流等原因GCDN Blog關閉了,只好把一些有用點的搬過來了。

2009年8月13日 12:29 by winking

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

這個在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
參數
obj 類型:System.Object

對其調用方法或構造函數的對象。如果方法是靜態的,則忽略此參數。如果構造函數是靜態的,則此參數必須為 null 引用(在 Visual Basic 中為 Nothing ) 或定義該構造函數的類的實例。

parameters 類型: System.Object[]

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

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

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

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)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日本a在线观看 | 国产成人高清在线 | 中文字幕精品在线播放 | 本站只有精品 | 成年免费视频黄网站在线观看 | 欧美精品一区二区中文字幕 | 欧美一级网 | 欧美精品久久久久久久久老牛影院 | 网站激情 | 国产精品九九久久一区hh | 精品国产乱码久久久久久丨区2区 | 一级黄色大片在线观看 | 国产成人av免费 | 亚洲网站一区 | 香蕉成人在线观看 | 日本黄色大片免费 | 欧美囗交| 蜜桃麻豆视频 | 久草在线视频福利 | 国产韩国精品一区二区三区久久 | 国产成年人网站 | 91美女福利视频 | 蜜桃视频网站在线观看 | 亚洲特黄| 精品国产乱码一区二区三区四区 | 午夜在线观看视频网站 | 精品一区二区三区日本 | 午夜热门福利 | 成人毛片av在线 | 中国洗澡偷拍在线播放 | 欧美一区二区三区不卡免费观看 | 精品国产91久久久久久久 | 亚洲人成电影在线 | 久久华人 | 国产乱淫a∨片免费观看 | 国产亚洲精品久久777777 | 久久精品视频在线免费观看 | 久久精品亚洲一区二区 | 免费一级毛片在线播放视频老 | 精品国产一区二区三区四区阿崩 | 午夜伦情电午夜伦情电影 |