![](/img/trans.png)
[英]Methodbase.Invoke on Loaded assembly method does not hit breakpoint
[英]MethodBase.Invoke Method
我試圖了解反射是如何工作的,所以我的問題是,當我想在程序集中調用某些方法時,為什么我將方法參數作為 object 數組而不是字符串發送?
例如,我想調用此方法,它獲取字符串參數,但我將 arguments 作為 object 數組發送。 據我所知 object 不能轉換成字符串那么它是如何轉換的呢?
public string Display(string Name)
{
return Name;
}
MethodBase.Invoke
允許調用具有任意類型的許多參數的方法。
MethodBase.Invoke
允許您使用任何參數調用任何方法,包括您的Display(string Name)
以及MyMethod(int val)
和object[] params
,使Invoke
的調用者能夠提供任何類型的參數。
回覆:
據我所知 object 不能轉換成字符串所以它是如何轉換的
這里發生的是裝箱,請查看裝箱和拆箱(C# 編程指南) 。
如果您嘗試使用類型不正確的參數調用您的方法,它將無法正常工作。
下面的代碼片段將生成以下 output。
MagicClass.ItsMagic() returned: 900, type: System.Int32
Object of type 'System.String' cannot be converted to type 'System.Int32'.
public class MagicClass
{
private int magicBaseValue;
public MagicClass() { magicBaseValue = 9; }
public int ItsMagic(int preMagic) { return preMagic * magicBaseValue; }
}
public static void Main(string[] args)
{
var m = new MagicClass();
MethodInfo magicMethod = m.GetType().GetMethod("ItsMagic");
object magicValue = magicMethod.Invoke(m, new object[] { 100 });
Console.WriteLine($"MagicClass.ItsMagic() returned: {magicValue}, type: {magicValue.GetType()}");
try
{
object magicValue2 = magicMethod.Invoke(m, new object[] { "One hundred" });
} catch (ArgumentException ex) { Console.WriteLine(ex.Message); }
}
MagicClass 是從MethodBase.Invoke Method的文檔中借來的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.