【问题标题】:Why can't I do Class.GetMethod() but I can do this.GetType().GetMethod()?为什么我不能做 Class.GetMethod() 但我可以做 this.GetType().GetMethod()?
【发布时间】:2013-08-12 15:45:10
【问题描述】:

为什么我不能Class.GetMethod(string) 但我可以this.GetType().GetMethod(string)

我想做前者,因为我已经知道要在哪个类中搜索,这似乎会快很多...

【问题讨论】:

    标签: c#


    【解决方案1】:

    GetMethod 是在 Type 类上声明的方法...而不是在您正在查看的类上。 (特别是,该类可能有一个GetMethod 方法,这会严重混淆事情......)

    你可以使用

    typeof(Class).GetMethod(...)
    

    但是,不是获取特定实例的类型 - 这就是您要查找的全部内容吗?

    编辑:请注意,GetType(string) 仅在 TypeAssembly (可能还有其他一些类型)上声明。普通的Object.GetType() 方法没有有字符串参数。

    【讨论】:

    • 我猜如果我能给它一些更具体的东西(不是字符串)会更快......所以是的,我想这确实有帮助!
    • @ovatsug25:“给它一些更具体的东西”是什么意思?您的要求在这里非常不清楚...您说要的Class.GetMethod(string) is 仍在使用字符串...我以为您只想摆脱对this.GetType(string)的调用-事实上,它甚至无法编译。
    【解决方案2】:

    因为前者是您在类上调用静态方法的方式。

    如果要获取类的类型,只需使用typeof

    typeof(Class).GetMethod(someString);
    

    【讨论】:

      【解决方案3】:

      嗯,你可以做任何一个:

      typeof (MyClass).GetMethod("MyMethod");
      

      MyClass myClass = new MyClass();
      myClass.GetType().GetMethod("MyMethod");
      

      只需添加 - myClass.GetType().GetMethod("MyMethod") - 在运行时解析,其中 typeof(MyClass).GetMethod("MyMethod") 在编译时解析。

      Here 有点多。

      【讨论】:

      • 我不认为你的第二个例子等同于第一个。第一个示例调用Type 类的GetMethod 方法。第二个示例尝试在 MyClass 类型上调用 GetMethod。如果MyClass 没有定义名为GetMethod 的方法,则会产生编译错误。也许你的意思是你的第二个例子是myClass.GetType().GetMethod("MyMethod")
      • @ChrisDunaway 不,如果找不到该方法,两者都将返回 null。你也看到我的编辑了吗(我承认有区别),这是你的意思吗?
      • @ChrisDunaway 是的,我有一个错字,因为我赶时间,已修复。
      猜你喜欢
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2020-08-05
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多