C#系列之反射关键类Assembly和Activator知识点

本文介绍了Activator类在创建对象实例时的作用,包括无参和有参构造函数的使用。同时,详细阐述了Assembly类如何加载程序集以及获取其中的类信息。学习这些内容是为理解Unity引擎基于反射的工作机制做准备。
摘要由CSDN通过智能技术生成

目录

1.Activator

 1 无参构造

 2 有参构造

2.Assembly

 1 先加载一个指定程序集

 2 再加载程序集中的一个类对象之后才能使用反射

3.学习反射的原因


1.Activator

用于快速实例化对象的类,用于将Type对象快速实例化为对象(自动调用构造函数)。先得到Type,然后快速实例化一个对象。

Type testType=typeof(Test);

 1 无参构造

Test testObj=Activator.CreateInstance(testType) as Test;

 2 有参构造

testObj=Activator.CreateInstance(testType ,9) as Test;    //指构造函数参数的数目

testObj=Activator.CreateInstance(testType ,55,“Nicole Potter") as Test; 

2.Assembly

程序集类

主要用来加载其它程序集,加载后才能用Type来使用其它程序集中的信息。如果想要使用不是自己程序集中的内容,需要先加载程序集。比如:dll文件(库文件)。

简单的把库文件看成一种代码仓库,它是提供给使用者一些可以直接拿来用的变量,函数或类。

三种加载程序集的函数

一般用来加载在同一文件下的其它程序集

Assembly assembly2=Assembly.Load("程序集名称");

一般用来加载不在同一文件下的其它程序集

Assembly assembly=Assembly.LoadFrom("包含程序集清单的文件的名称或路径");

Assembly assembly3=Assembly.LoadFile("要加载的文件的完全限定路径");

 1 先加载一个指定程序集

Assembly assembly=Assembly.LoadFrom("包含程序集清单的文件的名称或路径-加//或者@都可以,里面不能直接使用/,不需要后缀");

Type[ ] types=assembly.GetTypes();

for(int i=0;i<types.Length;i++)

{

  Console.WriteLine(types[i]);

}

 2 再加载程序集中的一个类对象之后才能使用反射

Type ic=assembly.GetType("内容");

MemberInfo[ ] members=ic.GetMembers();

for(int i=0;i<members.Length;i++)

{

 Console.WriteLine(members[i]);

}

//通过反射来实例化一个ic对象,首先得到枚举Type来得到可以传入的参数

Type moveDir=assembly.GetType("内容");

FieldInfo right=moveDir.GetField("Right");

//直接实例化对象

object icO=Activator.CreateInstance(ic,1,2,right,GetValue(null));

//得到对象中的方法,通过反射

MethodInfo move=ic.GetMethod("Move");

....

3.学习反射的原因

为了之后学习Unity引擎的基本工作原理做铺垫,Unity引擎的基本工作机制就是建立在反射的基础上。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nicole Potter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值