按字符串获取静态类

时间:2014-05-04 08:29:57

标签: c# class reflection types

Type.GetType("System.Windows.Forms.MessageBox")
    .GetMethod("Show", new Type[] { Type.GetType("System.String") })
    .Invoke(null, new object[] { "test" });

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

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您需要指定程序集的全名 (它位于GAC中 - 如果您获胜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" });

答案 1 :(得分:1)

        string type = typeof(MessageBox).AssemblyQualifiedName;

        Type.GetType(type).GetMethod("Show", new Type[] { Type.GetType("System.String") }).Invoke(null, new object[] { "test" });

好的每个人,AssemblyQualifiedName都有效。