.NET/C# 使用反射呼叫含 ref 或 out 引數的方法
阿新 • • 發佈:2018-12-12
使用反射,我們可以很容易地在執行時呼叫一些編譯時無法確定的屬性、方法等。然而,如果方法的引數中包含 ref
或 out
關鍵字的時候,又該怎麼呼叫呢?
本文將介紹如何反射呼叫含 ref
或 out
關鍵字的方法。
比如我們有這樣的型別:
public class Walterlv
{
public string Get(string key)
{
}
}
那麼反射的時候可以使用:
var walterlv = new Walterlv();
var value = (string) typeof(Walterlv).GetMethod("Get").Invoke(walterlv, new object[] { "key" });
然而現在我們的函式是這樣的,帶一個 out
關鍵字的引數:
public class Walterlv
{
public bool TryGet(string key, out string value)
{
}
}
事實上,無論是什麼樣的方法,在反射式呼叫的都是同一個方法,即 Invoke
。
對於 out
和 ref
關鍵字的方法來說,會更新傳入的陣列,也就是 Invoke
最後傳入的那個引數。所以其實我們只需要儲存那個陣列的例項,在呼叫完畢之後便能重新取出被修改的引數了。
var walterlv = new Walterlv ();
var args = new object[] { "key", null };
var value = (string) typeof(Walterlv).GetMethod("Get").Invoke(walterlv, args);
// 在這裡可以從 args 裡面取出被 ref 或者 out 修改的引數。