【问题标题】:What is the Object paramter in MethodInfo.Invoke() for?MethodInfo.Invoke() 中的 Object 参数是干什么用的?
【发布时间】:2015-01-31 02:16:38
【问题描述】:

MethodInfo.Invoke()Object obj参数的作用是什么?

MSDN documentation 说:

调用方法或构造函数的对象

我不明白你如何调用一个方法“on”一个对象。我以为你只是从 Main() 或一个类中调用了一个方法,就是这样。

而且,我可以对这个参数使用任何类型的任何对象吗?

【问题讨论】:

    标签: c# reflection invoke methodinfo


    【解决方案1】:

    如果方法是static,您只需调用该方法,在这种情况下,您将null 传递给Invoke 的参数。

    对于实例方法,您在对象的实例上调用方法,而不仅仅是在“无”上。您通常调用该方法的对象实例就是您传递给Invoke 的对象实例。

    例如,如果您有:

    string s = "hi";
    var s2 = s.Trim();
    

    您可以通过以下方式在反射中建模:

    string s = "hi";
    MethodInfo trimMethod = GetTrimMethodInfo();
    object s2 = trimMethod.Invoke(s);
    

    【讨论】:

    • 这很有意义。但是如果方法不修改对象或与之交互,我可以传递任何我想要的对象吗?
    • 回答我上面的评论。我假设如果方法不修改类或对象,那么它应该只是静态的。 .谢谢
    • @JackBarn 如果它不需要访问对象的状态,它应该是静态的。一个方法可能需要访问对象状态而不修改它,因此需要是一个实例方法。
    【解决方案2】:

    它是应该用来调用方法的对象的实例,例如:

    private class MyClass
    {
        private string _name;
        public MyClass(string name)
        {
            _name = name;
        }
    
        public void Foo()
        {
            Console.WriteLine(_name);
        }
    }
    

    如果我们像这样调用 foo 方法:

    Type magicType = typeof (MyClass);
    
    MyClass c1 = new MyClass("1st class");
    MyClass c2 = new MyClass("2nd class");
    
    // Get the ItsMagic method and invoke with a parameter value of 100
    
    MethodInfo magicMethod = magicType.GetMethod("Foo");
    object magicValue = magicMethod.Invoke(c1, null);   // Output is 1st class
    

    如果我们用 c2 调用,我们会得到:

    object magicValue = magicMethod.Invoke(c2, null);   // Output is 2nd class 
    

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多