簡體   English   中英

MethodBase.Invoke 方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM