C#中Activator.CreateInstance()方法用法分析

C#中Activator.CreateInstance()方法用法分析

前言

C#中 Activator.CreateInstance() 方法是一种动态创建实例的方法。在实际项目中,我们常常需要动态加载程序集并创建其中的类型对象。这时,Activator.CreateInstance()方法就可以起到很好的作用。

方法说明

Activator.CreateInstance() 方法主要包含两个重载:

public static object CreateInstance(Type type)
public static object CreateInstance(Type type, params object[] args)

第一个重载用于创建指定类型的实例,第二个重载则可以传入参数列表,进行指定类型的实例化。

用法示例

使用CreateInstance方法创建某类型的实例

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

    public void SayHi()
    {
        Console.WriteLine($"Hi, my name is {Name}, and I am {Age} years old.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Type personType = Type.GetType("Person"); //获取Person类型的Type对象
        object personObj = Activator.CreateInstance(personType); //创建Person类型的实例对象
        Person person = (Person)personObj; //类型转换,将object类型转换为具体类型Person
        person.Name = "Tom";
        person.Age = 20;
        person.SayHi(); //输出: Hi, my name is Tom, and I am 20 years old.
    }
}

在上面的示例中,我们使用Type.GetType()获取 Person 类型的 Type 对象,并使用 Activator.CreateInstance() 的第一个重载动态创建了一个该类型的实例。动态创建的对象我们得到了一个 object 类型的对象,需要进行类型转换才能访问对象成员,这里通过将 object 转换为 Person 类型来完成对成员的访问。

使用CreateInstance方法创建含构造器的实例

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

    public Person(string name, int age) //含参构造方法
    {
        Name = name;
        Age = age;
    }

    public void SayHi()
    {
        Console.WriteLine($"Hi, my name is {Name}, and I am {Age} years old.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Type personType = Type.GetType("Person"); //获取Person类型的Type对象
        object personObj = Activator.CreateInstance(personType, new object[] { "Tom", 20 }); //创建含构造器的Person类型的实例对象
        Person person = (Person)personObj; //类型转换,将object类型转换为具体类型Person
        person.SayHi(); //输出: Hi, my name is Tom, and I am 20 years old.
    }
}

在上面的示例中,我们使用了含参的构造函数创建了该类型的实例,通过使用 Activator.CreateInstance() 的第二个重载并传入构造函数参数,实现了在创建对象时确定特定的属性值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中Activator.CreateInstance()方法用法分析 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 详解ASP.NET Core 中间件之压缩、缓存

    详解ASP.NET Core 中间件之压缩、缓存 在ASP.NET Core应用程序中,可以使用中间件来实现压缩和缓存功能。在本攻略中,我们将详细介绍如何使用中间件来实现压缩和缓存,并提供两个示例说明。 1. 压缩中间件 在ASP.NET Core应用程序中,可以使用中间件来实现压缩功能。可以按照以下步骤操作: 安装Microsoft.AspNetCore.…

    C# 2023年5月16日
    00
  • C#修改及重置电脑密码DirectoryEntry实现方法

    下面是关于“C#修改及重置电脑密码DirectoryEntry实现方法”的完整攻略。 概述 在Windows操作系统中,重置或修改本地和域账户的密码是非常常见的操作,尤其是在管理大量计算机的企业环境中更是如此。C#程序可以通过使用DirectoryEntry对象来连接Active Directory进行密码管理。 步骤 下面是重置或修改密码的步骤: 步骤一:…

    C# 2023年5月15日
    00
  • C#中string和StingBuilder内存中的区别实例分析

    下面是“C#中string和StringBuilder内存中的区别实例分析”的完整攻略: 1. 什么是String和StringBuilder 在C#中,String和StringBuilder都是字符串类型。String是一个不可更改的字符串类型,而StringBuilder是一个可变的字符串类型。 2. String和StringBuilder的区别 2…

    C# 2023年6月8日
    00
  • 在C#中使用Channels的完整教程

    在C#中使用Channels的完整教程 什么是Channel? Channel是在C# 7.0版本中引入的一种全新的内置类型,用于在多个awaitable操作之间更方便地进行同步和异步消息传递。 Channel可以看做是一个类似线程安全队列的数据结构,支持读/取操作(receive)和写/存操作(send),并且本身天生具有异步支持(async/await)…

    C# 2023年6月3日
    00
  • 详解ASP.NET中Session的用法

    下面是详解ASP.NET中Session的用法的完整攻略: 什么是Session Session是ASP.NET中一个重要的状态管理机制,用于在Web应用程序中存储和使用用户特定的数据。Session数据存储在服务器上,以确保对敏感信息的控制和安全性。Session生命周期从用户第一次访问Web站点开始,直到用户关闭浏览器或Session超时为止。Sessi…

    C# 2023年5月31日
    00
  • C#实现将一个字符串进行翻转显示的6种方法

    下面给出C#实现将一个字符串进行翻转显示的6种方法的完整攻略。 步骤1:分析题目要求 题目要求将一个字符串进行翻转显示,该字符串可以包含中英文、数字、标点符号,我们需要使用C#实现该功能,并提供6种实现方法。 步骤2:C#实现翻转字符串 方法1:使用Array.Reverse()方法 我们可以使用C#的Array.Reverse()方法来实现字符串翻转。该方…

    C# 2023年6月7日
    00
  • C#中==(双等于号)与equals()区别详解

    C#中,==(双等于号)与equals()都是比较两个对象是否相等的操作。但是它们之间存在一些区别,接下来我们来详细讲解。 ==(双等于号)的作用 在C#中,双等于号是用来比较两个变量的值是否相等的,例如: int num1 = 10; int num2 = 10; bool result1 = (num1 == num2); // true 以上代码中,我…

    C# 2023年6月7日
    00
  • C# List Contains()的用法小结

    下面我将针对“C# List Contains()的用法小结”的完整攻略,给出详细讲解。 一、List 类概述 在 C# 中,List 类是一个泛型动态数组,是 System.Collections.Generic 命名空间的一部分。它提供了一系列方法和属性来操作元素的添加、查找和删除等。List 类的定义如下: public class List<T…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部