【问题标题】:Get static class by string通过字符串获取静态类
【发布时间】:2023-03-26 03:30:01
【问题描述】:
Type.GetType("System.Windows.Forms.MessageBox")
    .GetMethod("Show", new Type[] { Type.GetType("System.String") })
    .Invoke(null, new object[] { "test" });

我正在尝试调用MessageBox.Show("test") 方法,只使用字符串值作为类名和方法名。但是,我无法通过名称获取 MessageBox 的类型。

有什么想法吗?

【问题讨论】:

    标签: c# class reflection types


    【解决方案1】:
            string type = typeof(MessageBox).AssemblyQualifiedName;
    
            Type.GetType(type).GetMethod("Show", new Type[] { Type.GetType("System.String") }).Invoke(null, new object[] { "test" });
    

    大家好,AssemblyQualifiedName 有效。

    【讨论】:

    • System.Windows.Forms.MessageBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    【解决方案2】:

    您需要指定程序集的全名。
    (它位于 GAC - 如果你有 win 7,你可以在:%windir%\assembly 中看到程序集):

        Type t = Type.GetType("System.Windows.Forms.MessageBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
        var method = t.GetMethod("Show", new Type[] { Type.GetType("System.String") });
        method.Invoke(null, new object[] { "test" });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多