c#中的class.forName等效而不创建实例

时间:2017-05-09 11:50:47

标签: c# static-methods

我想以类似Java class.forName()的方式动态访问c#中的类。我只找到像Class.forName() equivalent in .NET?这样的东西,但我不想创建实例。

详细说明:我有一个包含类列表的简单文本文件。我使用file.ReadLine()读取它们(所以我将所有类名称作为字符串)然后我想在每个类上执行相同的静态方法:class1.method(); class2.method;,依此类推。这些类都存在,我需要访问它们。我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

C#不支持静态接口(或接口中的静态成员),因此除非您想使用工厂类(通常的方法),否则您需要使用反射来直接调用静态方法。

void Main()
{

  Console.WriteLine(Type.GetType("A").GetMethod("Hi").Invoke(null, new object[] {}));
}

class A
{
  public static string Hi() { return "Hi!"; }
}

您可能希望为该类型使用完全限定名称,以使此工作非常好。仅使用类型的名称是棘手的,特别是当您尝试从其他程序集调用类型时(您可能是这样,否则没有理由使用反射 - 只需使用委托或其他任何字典)。 / p>

答案 1 :(得分:0)

您可以使用System.Reflection将程序集加载到内存中,然后深入查看该类型,然后获取所需的方法并调用。

请参阅文档

GetMethod

答案 2 :(得分:0)

如果您拥有所需Type的名称,则可以使用Type.GetType(string)方法 例如,如果你有这样的类:

namespace MeProgram.BusinessLogic
{
    public class MeObject {}
}

该对象的完整班级名称应为"MeProgram.BusinessLogic.MeObject"

现在您可以在Type.GetType(string)方法中使用该名称,例如:

string className = "MeProgram.BusinessLogic.MeObject";
Type classType = Type.GetType(className);