.NET 反射 Reflect

获取类信息对象的Type方法

  1. 从对象获取: Type type = 对象.getType();
  2. 从类名获取: Type type = typeof(类名) ; typeof 是关键字,不是方法
  3. 从全类名(命名空间 + 类名) 获取 Type type = Type.GetType(“命名空间.类名”);

Activator.CreateInstance(type) // 使用无参数构造函数 创建次类的对象,返回值 Object,如果改类没有无参构造函数,会报异常

在这里插入图片描述

在这里插入图片描述

Assembly a = Assembly.GetExecutingAssembly();
object instance = a.CreateInstance(“Xianfen.NET.TestDynamic.Me”); //Me 是类
Type type = instance.GetType();
MethodInfo mi = type.GetMethod(“GetName”);
object result = mi.Invoke(instance, null);
Assembly myassembly = Assembly.LoadFile(@“C:\Users\WS\Desktop\WindowForm\StudyProgram\ClassLibrary\bin\Debug\ClassLibrary.dll”);
Type type = myassembly.GetTypes()[0];
MemberInfo[] members = type.GetMembers();
FieldInfo[] fields = type.GetFields();
Object[] params_obj = new Object[1];

params_obj[0] = “jiaopeng”;
string a = type.GetMethods()[0].ToString();
object instance = myassembly.CreateInstance(myassembly.GetTypes()[0].FullName);
type.GetField(“Name”).SetValue(instance, “张三”);
object value = myassembly.GetTypes()[0].GetMethods()[0].Invoke(instance, new object[1] { “AAAA” });

//加载程序集
Assembly myassembly_2 = Assembly.LoadFile(@“C:\Users\WS\Desktop\Test\Winform\Client\Client\bin\Debug\Client.exe”);
//获取类型
Type[] type_2 = myassembly_2.GetTypes();
//实例
object instance_2 = myassembly_2.CreateInstance(type_2[0].FullName);
(instance_2 as Form).Show();

Assembly myassembly = Assembly.LoadFrom(@“C:\Users\WS\Desktop\WindowForm\StudyProgram\ClassLibrary\bin\Debug\ClassLibrary.dll”);
Type[] type = myassembly.GetTypes();
Type t_Function = myassembly.GetTypes()[0];
AppDomain myDomain = AppDomain.CreateDomain(“NewDomain”);
var aa = myassembly.GetTypes()[1].FullName;

string a = myassembly.GetTypes()[0].Namespace;
string b = myassembly.GetTypes()[0].ToString();
var obj = myDomain.CreateInstance(“ClassLibrary”, “ClassLibrary.LoginInfo”).Unwrap();

Type type1 = obj.GetType();

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

NewClassw nc = new NewClassw();
Type t = nc.GetType(); 
ConstructorInfo[] ci = t.GetConstructors();
//获取类的所有构造函数
foreach (ConstructorInfo c in ci) 
//遍历每一个构造函数
 {
	ParameterInfo[] ps = c.GetParameters(); 
	//取出每个构造函数的所有参数
	foreach (ParameterInfo pi in ps) {
		//遍历并打印所该构造函数的所有参数 
		Console.Write(pi.ParameterType.ToString()+" "+pi.Name+",");
} 
Console.WriteLine();
}

创建实例2中方法
1、构造函数
Type t = typeof(NewClassw);
Type[] pt = new Type[2];
pt[0] = typeof(string);
pt[1] = typeof(string);
//根据参数类型获取构造函数
ConstructorInfo ci = t.GetConstructor(pt);
//构造Object数组,作为构造函数的输入参数
object[] obj = new object[2]{“grayworm”,“hi.baidu.com/grayworm”};
//调用构造函数生成对象
object o = ci.Invoke(obj); /
/调用生成的对象的方法测试是否对象生成成功
//((NewClassw)o).show();
2、Activator.CreateInstance
Type t = typeof(NewClassw);
//构造函数的参数
object[] obj = new object[2] { “grayworm”, “hi.baidu.com/grayworm” };
//用Activator的CreateInstance静态方法,生成新对象
object o = Activator.CreateInstance(t,“grayworm”,“hi.baidu.com/grayworm”);
//((NewClassw)o).show();
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值