我想以类似Java class.forName()
的方式动态访问c#中的类。我只找到像Class.forName() equivalent in .NET?这样的东西,但我不想创建实例。
详细说明:我有一个包含类列表的简单文本文件。我使用file.ReadLine()
读取它们(所以我将所有类名称作为字符串)然后我想在每个类上执行相同的静态方法:class1.method(); class2.method;
,依此类推。这些类都存在,我需要访问它们。我怎么能这样做?
答案 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)
答案 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);