反射笔记1
来源:互联网 发布:淘宝白底图片制作教程 编辑:程序博客网 时间:2024/06/05 08:09
创建项目
包含两个项目:
控制台项目:ConsoleApplication1
类库项目:ClassLibrary1
代码1:创建一个控制台程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
delegate void DelegateSetter(string value);
static void Main(string[] args)
{
//使用委托,优化反射的速度,为类型A的属性的Set方法加上委托
A r = new A();
//为发射中的对象的属性的set方法加上委托
DelegateSetter ds = (DelegateSetter)Delegate.CreateDelegate(typeof(DelegateSetter), r, typeof(A).GetProperty("name").GetSetMethod());
MethodInfo methodInfo = r.GetType().GetMethod("printB");
object[] param = new object[]{"nihao"};
methodInfo.Invoke(r, param);
ds("hello");
Console.WriteLine(r.name);
//早期反射
Type type = r.GetType();
//加载本地程序集(本项目中)
Assembly assembly = Assembly.Load("ConsoleApplication1");
//获取程序集中的类型
Type ts = assembly.GetType("ConsoleApplication1.A");
//创建实例
//a和obj同样的效果,都是创建实例化A类对象
object a = assembly.CreateInstance("ConsoleApplication1.A");
object obj = Activator.CreateInstance(ts);
//获取类型中的方法
MethodInfo pb = ts.GetMethod("printA");
//执行类型中的方法
pb.Invoke(a, null);
//晚期加载
//程序集
Assembly assembly2 = Assembly.LoadFrom(@"C:\Users\qkf7476\Documents\visual studio 2013\Projects\ConsoleApplication1\"+
@"ClassLibrary1\bin\Debug\ClassLibrary1.dll");
//获取程序集中的类型(包括类)
Type types = assembly2.GetType("ClassLibrary1.Class1");
//创建对象
object c1 = Activator.CreateInstance(types);
//获取类型中的属性
PropertyInfo pi = types.GetProperty("name");
//设置属性值
pi.SetValue(c1, "123");
//获取对象中的属性值
Console.WriteLine(pi.GetValue(c1));
//获取类型中的方法
MethodInfo mi2 = types.GetMethod("PrintName");
//执行类型中的方法
mi2.Invoke(c1, null);
Console.ReadLine();
}
}
public class A
{
public string name { get; set; }
public string address;
public void printA()
{
Console.WriteLine("print A");
}
public void printB(string b)
{
Console.WriteLine(b);
}
}
}
代码2:创建一个类库文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
public class Class1
{
public string name { get; set; }
public string GetName() {
return this.name;
}
public void PrintName() {
Console.WriteLine(this.name);
}
}
}
注意:如果在本项目中使用
Assembly asm3 = Assembly.Load("ClassLibrary1");
那么必须先在本项目中引用ClassLibrary1的项目dll,否则报错。
- Java反射笔记1
- java反射笔记1
- 反射笔记1
- 反射机制笔记1
- java反射复习笔记1
- 反射 笔记
- 反射笔记
- 反射笔记
- 反射笔记
- 15. JAVA 反射机制 Part 1(Class类、反射、反射机制) ----- 学习笔记
- 黑马程序员---反射总结笔记(2015.7.1)
- java基础巩固笔记(1)-反射
- java 反射机制-学习笔记(1)
- RTTI和反射笔记
- 学习笔记--枚举,反射
- JavaSE学习笔记--反射
- 笔记_反射
- 反射机制学习笔记
- 目标检测的图像特征提取
- crond和crontab的调研
- jmeter远程连接负载机出现报错解决方法
- js打印菱形
- 学习笔记:ubuntu永久修改DNS的两种方法
- 反射笔记1
- VC 获取Windows已安装软件(注册表方式)
- 学习笔记:Centos6.5永久修改DNS的方法
- 学习笔记:Linux重启方式init 0 init1 init 3 init 5 init 6 启动级别说明
- 最大熵原理
- 排错经历:openstack 报错ERROR oslo.messaging._drivers.impl_qpid......
- 排错经历:openstack搭建dashboard进入输入帐号密码登录后报错
- 排错经历:openstack 创建实例错误,系统处理器不支持硬件加速
- 学习笔记:vsphere6 迁移物理机,指定被迁移的IP报错