C# 反射之Activator用法举例

概述

     程序运行时,通过反射可以得到其它程序集或者自己程序集代码的各种信息,包括类、函数、变量等来实例化它们,执行它们,操作它们,实际上就是获取程序在内存中的映像,然后基于这个映像进行各种操作。

Activator用法介绍

Activator用于实例化对象的类,通过type获取类型后,可以通过它实例化对象. Activator.CreateInstance默认调用无参构造函数。

实例:先定义一个学生类型:

public class Student{public Student(){Name = "zls";Age = 18;id = 20;}public Student(string name,int age){Name = name;Age = age;id = 21;}public string Name { get; set; }public int Age { get; set; }public int id;public int Score(int a,int b ){return a + b;}}

1、无参数构造函数: 使用指定类型的默认构造函数来创建该类型的实例。

函数原型

public static object CreateInstance(Type type);
Type type = typeof(Student);Student test = Activator.CreateInstance(type) as Student;Console.WriteLine(test.id);

2. 有参数构造函数:使用与指定参数匹配程度最高的构造函数创建指定类型的实例。函数原型:

public static object CreateInstance(Type type, params object[] args);
test = Activator.CreateInstance(type, "zyr", 19) as Student;Console.WriteLine(test.id);

运行结果:

9ee8bf44bee76b202a5425ffc35bece2.png

当然创建实例有很多重载,System.Activator类中提供了三组静态方法来创建类型的实例,每组方法均提供多个重载,适用不同的场景。个别重载方法返回ObjectHandle对象,需要unwrap后才能获取对象实例。如:CreateInstanceFrom :使用指定的程序集文件和与指定参数匹配程度最高的构造函数来创建指定名称的类型的实例。

用法举例:

string t = "TestDll.Person";string assemblyPath = @"C:\Users\majm\source\repos\ConsoleApp29\bin\Debug\TestDll.dll";var personHandle = Activator.CreateInstanceFrom(assemblyPath, t);var person = (Person)personHandle.Unwrap();Console.WriteLine(person.Score(5,6));

运行结果:11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis批量插入

转载于:https://blog.51cto.com/12701034/1929672

狐狸文│区块链发展的正路

(图片出自网络,版权归原作者所有)最近看了一本书:《美国增长的起落》。这本书是大部头,但看起来很过瘾。通过对这本书的阅读,我更新了自己对区块链发展的理解。这一年,“区块链”很热&#xff0…

mysql 一主一备_Mysql一个主一备

Mysql主从复制 -- 一主一备主从复制原理:Mysql的主从复制是mysql本身自带的一个功能,不需要额外的第三方软件可以实现,其复制功能并不是copy文件实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为…

解决安装Weblogic domain卡住问题(Primeton BPS)

这两天一直有一个问题困扰我,在suse10weblogic(920,923,100,103)上安装bpm产品失败。有些版本是创建domain的时候卡在create security information上,有些版本卡在安装包start weblogic上。但是在winXPweblogic10.3bpm安装成功。 经过几番GOOGLE,终于找到…

cocos2d-js 热更新具体解释(一)

本文将会具体解说cocos2d-js下的热更新机制。这篇内容先给大家介绍一下两个manifest文件就当热身了。首先介绍project.manifest: 举个样例 {"packageUrl" : "http://192.168.1.108/games/dragon_gold","remoteManifestUrl" : "…

Qt之水平/垂直布局(QBoxLayout、QHBoxLayout、QVBoxLayout)

简述 QBoxLayout可以在水平方向或垂直方向上排列控件,由QHBoxLayout、QVBoxLayout所继承。 QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。 QVBoxLayout:垂直布局,在垂直方向上排列控…

Optaplanner终于支持多线程并行运行 - Multithreaded incremental solving

Optaplanner 7.9.0.Final之前,启动引擎开始对一个Problem进行规划的时候,只能是单线程进行的。也就是说,当引擎对每一个possible solution进行分数计算的过程中,细化到每个步骤(Caculation),都只能排队在同一个线程中依…

python棋盘格_干货必看 | Python的turtle库之经典棋盘格

国际棋盘格是一个由9横9纵的线组成的格子正方形,用Python的turtle库进行绘制的时候,先做9横9纵的线,再填上灰色小正方形,这就可以完成一个棋盘格了,下面是具体的操作步骤。(一)整体代码1、import turtleimport turtle2…

一位技术老人给.NET初学者的一些建议

.NET平台应用领域众多,随着这些年的不断更新迭代,日趋臻善,也受到越来越多的开发者青睐。自从2000 年6 月22 日 微软推出Microsoft.NET 战略 ,至今已有22载,这些年新技术,新框架层出不穷,目不暇…

android 本地数据库sqlite的封装

单机android sqlite数据库的实现,这个数据库可与程序一起生成在安装包中一、下载sqlite3.exe文件二、运行 cmd 转到sqlite3.exe 所在目录 运行 sqlite3.exe 数据库名.db然后会出现sqlite>的命令提示符输入创建表的语句, create table 表名&#xf…

ResourceManager中的Resource Estimator框架介绍与算法剖析

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文由宋超发表于云社区专栏 本文首先介绍了Hadoop中的ResourceManager中的estimator service的框架与运行流程,然后对其中用到的资源估算算法进行了原理剖析。 一. Resource Estimator Service…

几十款 WPF 控件 - UI 库,总有一款适合你

几十款 WPF 控件 - UI 库,总有一款适合你独立观察员 2022 年 10 月 16 日引言众所周知,使用 WPF 框架能够开发出功能强大、界面美观的桌面端应用。能够达到这个效果,各种 WPF 的控件库、UI 库功不可没。所以,想着能不能收集一下目…

mysql将系统权限授予用户_mysql创建用户并授予权限

1、create schema [数据库名称] default character set utf8 collate utf8_general_ci;--创建数据库采用create schema和create database创建数据库的效果一样。2、create user ‘[用户名称]‘‘%‘ identified by ‘[用户密码]‘;--创建用户密码8位以上,包括&#…

Android Studio导出jar包

Eclipse直接有个Export,可以直接导出jar包。AS相对Eclipse变化很大,编译脚本变成了Gradle,各种导包操作都有差异。 下面是AS导出jar的过程: 第一步,修改app下的build.grade。 apply plugin: com.android.application修改为 apply …

GitHub Actions构建镜像并部署服务

目的通过GitHub的Actions来(白嫖)部署.Net服务到阿里云服务器。环境准备需要一个阿里云服务器并且该服务器还安装了docker环境,如果环境安装不清楚可以查看之前的文章。创建镜像仓库在阿里云的容器镜像服务中,创建一个镜像仓库用来存储我们测试的镜像&am…

20165232 缓冲区溢出漏洞实验

缓冲区溢出漏洞实验 实验准备 实验环境需要32位的Linux系统,需要下载安装一些用于编译 32 位 C 程序的软件包,代码如下: $ sudo apt-get update$ sudo apt-get install -y lib32z1 libc6-dev-i386$ sudo apt-get install -y lib32readline-gp…

使用qt的qtcore库怎么包含_GitHub - coologic/QtCoreExamples: QtCore模块相关类库范例

QtCoreExamplesQtCore模块相关类库范例QJsonExampleQt进行Json文件读写范例QXmlExampleQt使用QXmlStreamReader/QXmlStreamWriter类进行XML文件读写范例非不是使用QtXML模块QSharedMemoryExampleQt使用QSharedMemory实现共享内存QSettingsExample(Blog)Qt使用QSettings配置读写…

spfile

1 让ORACLE自己主动从spfile启动 SQL> create spfile/dev/vx/rdsk/vgora/lv_spfile from pfile; SQL> shutdown immediate; 改动initora11g.ora文件 /oracle/app/product/11g/db/dbs cp initora11g.ora initora11g.ora_bak echo SPFILE/dev/vx/rdsk/vgora/lv_spfil…

Atcoder 084D - Small Multiple(最短路径+思维)

分析&#xff1a;这题脑洞新奇...居然是最短路...将0到k-1看做k个点&#xff0c;第t个点向(10*t0,1,2...,9)%k连一条长度为0,,1,2,..,9的边&#xff0c;然后枚举s1,2,...,9,算出所有从s到0的最短路&#xff0c;答案就是最短路s的最小值。 1 #include<iostream>2 #include…

Blazor学习之旅(5)数据绑定

【Blazor】| 总结/Edison Zhou大家好&#xff0c;我是Edison。最近在学习Blazor做全栈开发&#xff0c;因此根据老习惯&#xff0c;我会将我的学习过程记录下来&#xff0c;一来体系化整理&#xff0c;二来作为笔记供将来翻看。本篇&#xff0c;我们来了解下在Blazor中数据是如…