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日

相关文章

  • 浅析C#中静态方法和非静态方法的区别

    接下来我将为您详细讲解“浅析C#中静态方法和非静态方法的区别”。 什么是C#中的静态方法和非静态方法 在C#中,静态方法和非静态方法是常见的两种方法类型。静态方法是指在类中定义的方法,该方法不需要实例化该类的对象就可以直接调用。而非静态方法则是需要实例化对象后才能被调用的方法。 具体来说,静态方法是使用 static 关键字定义的方法,而非静态方法则不使用 …

    C# 2023年6月7日
    00
  • 关于dotnet 替换 ASP.NET Core 的底层通讯为命名管道的 IPC 库的问题

    dotnet替换ASP.NET Core的底层通讯为命名管道的IPC库 在ASP.NET Core中,我们可以使用Inter-Process Communication(IPC)来实现进程间通信。默认情况下,ASP.NET Core使用Socket作为底层通信机制。但是,我们也可以使用命名管道来替换Socket。在本攻略中,我们将介绍如何使用命名管道来替换S…

    C# 2023年5月16日
    00
  • ASP.NET MVC学习教程之Razor语法

    一、什么是Razor语法? Razor语法是ASP.NET MVC中常用的视图引擎之一,它是一种轻量级模板语法,可以让开发者更方便地生成HTML代码以及与之相关的代码逻辑。Razor语法可以在ASP.NET Web Pages、ASP.NET MVC、ASP.NET Web API和ASP.NET Core等多个平台上使用。 二、如何在ASP.NET MVC…

    C# 2023年5月31日
    00
  • C#高效反射调用方法类实例详解

    C#高效反射调用方法类实例详解 反射是C#中非常强大的特性之一,它允许程序在运行时动态地分析、查询和修改程序元素。其中包括类、方法、属性、字段等等。使用反射可以实现很多高级的功能,比如动态加载程序集、动态调用方法、获取和修改类的状态等等。 本文将详细讲解如何使用C#高效地进行反射调用方法类实例的操作。主要涵盖以下内容: 反射基础 在使用反射之前,我们需要先了…

    C# 2023年6月1日
    00
  • C#泛型编程介绍

    当我们在编写C#代码时,我们经常需要对不同的数据类型进行操作。通常我们要定义一个函数或类,用于处理某种数据类型,但是我们通常需要编写多个函数或类来处理不同的数据类型,这很繁琐而且重复。这时,泛型编程为我们提供了一种可重用的解决方案。在本文中,我们将介绍C#泛型编程的概念和使用方法,包括泛型类、泛型方法和泛型约束。 泛型类 泛型类是一种定义类的方式,类中的某些…

    C# 2023年5月15日
    00
  • C#获取两个数的最大公约数和最小公倍数示例

    C#获取两个数的最大公约数和最小公倍数示例 本文将介绍如何在C#中获取两个数的最大公约数和最小公倍数。我们将使用辗转相除法和欧几里得算法来计算最大公约数和最小公倍数。C#中计算最大公约数和最小公倍数的示例代码也会在文章中提供。 计算最大公约数(GCD) 两个正整数a和b的最大公约数(GCD)是能够同时整除两个数的最大正整数。下面我们将使用辗转相除法来计算两个…

    C# 2023年6月7日
    00
  • C#词法分析器之转换DFA详解

    C#词法分析器之转换DFA详解 什么是词法分析? 词法分析(Lexical Analysis)是编译器中的一个步骤,也称为扫描器(Scanner)。词法分析的主要任务是将程序中的代码转换成一个个Token(标记)。Token是指单词或符号等,是编译器中的最小单位。 词法分析器的输入是源代码,识别出其中的每个Token,每个Token包括 Token种类 和 …

    C# 2023年6月7日
    00
  • C# 泛型字典 Dictionary的使用详解

    C# 泛型字典 Dictionary的使用详解 C#中的泛型字典Dictionary,是将键和值进行映射的一种数据结构。Dictionary在C#编程中非常常用,因为它支持高效的键值查找,非常适用于存储一组数据,并且能够快速根据键名找到对应的值。 基本语法 Dictionary属于System.Collections.Generic命名空间,所以要使用Dic…

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