我们可以在运行时创建一个类的实例,并通过代码调用所有类的方法吗?

时间:2011-05-02 08:03:20

标签: c# asp.net reflection

在采访中Interviwer问我我们可以在运行时创建一个类的实例并通过代码调用所有类的方法吗? TestClass类的示例代码在

之下
public class TestClass
{
    public int ID
    {
        get;
        set;
    }
    public string Name
    {
        get;
        set;
    }
    public float Salary
    {
        get;
        set;
    }
    public string Department
    {
        get;
        set;
    }
    public int Add(int a, int b)
    {
        return a + b;
    }
    public int Sub(int a, int b)
    {
        return a - b;
    }
}//end class

现在我想在运行时创建此类的实例并在运行时调用其所有方法和属性,任何人都可以解释如何将其归档。 2.以这种方式调用方法的好处/用途是什么?

2 个答案:

答案 0 :(得分:4)

是的,这是可能的。

要创建您要使用的实例:

Type classType = Type.GetType("TestClass");
object instance = Activator.CreateInstance(classType);

然后在Sub(23, 42)上调用instance看起来像:

classType.InvokeMember("Sub", BindingFlags.InvokeMethod, null, instance, new object[] { 23, 42 });

当您在编译时不知道类型并希望在运行时发现它们时(例如在外部dll,插件等中)使用反射(例如)。

答案 1 :(得分:2)

我认为他在询问反思。这里和谷歌都有关于这个主题的大量信息 基本上,你想要这样做的原因是,你不知道编译时的具体类型,需要在运行时动态找到它。
一个例子是一个简单的插件系统,你需要插件来实现某个接口。在运行时,您加载指定文件夹中的所有程序集并使用反射,您搜索实现该接口的类,然后创建该类的实例并在其上调用方法。