📜  给定类名字符串c#创建类的实例(1)

📅  最后修改于: 2023-12-03 15:11:40.617000             🧑  作者: Mango

给定类名字符串c#创建类的实例

在C#中,可以通过给定类名字符串来创建类的实例。这种方法被称为反射。

反射

反射是一种强大的技术,可以使我们在编译时以外的时间访问和操作程序的元数据。C#的反射库提供了一系列类型和方法,可以在程序执行时对类型进行查询和操作。

在C#中,要使用反射,需要引入命名空间System.Reflection

代码

下面是示例代码,演示如何在C#中使用反射来创建类的实例。

假设我们要创建一个名为"Person"的类的实例。这个类有两个属性:NameAge

首先,我们需要使用反射查询并获取这个类型:

Type personType = Type.GetType("Person");

其中,参数为Person,表示要查找名为"Person"的类型。如果这个类型在当前程序集中,Type.GetType方法会返回这个类型的Type对象;否则,它会返回null

接下来,我们可以使用Activator.CreateInstance方法来创建这个类型的实例:

object personInstance = Activator.CreateInstance(personType);

Activator.CreateInstance方法会返回一个object类型的实例。由于我们知道personTypePerson类型,因此可以将返回值转换为Person类型:

Person person = (Person)personInstance;

现在,我们就可以设置person的属性:

person.Name = "John";
person.Age = 30;

完整的代码如下:

using System;
using System.Reflection;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program
{
    static void Main(string[] args)
    {
        Type personType = Type.GetType("Person");
        object personInstance = Activator.CreateInstance(personType);
        Person person = (Person)personInstance;
        person.Name = "John";
        person.Age = 30;

        Console.WriteLine("Name: " + person.Name);
        Console.WriteLine("Age: " + person.Age);
    }
}

输出:

Name: John
Age: 30
总结

本文介绍了如何使用反射创建类的实例。需要注意的是,使用反射创建实例比直接使用new关键字创建实例的效率要低。因此,应该尽量减少使用反射,只在必要的时候使用。