博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小谈一下反射
阅读量:6431 次
发布时间:2019-06-23

本文共 1408 字,大约阅读时间需要 4 分钟。

在几个情况下:

1、你的同事给了你一个类库,这个时候你想动态创建dll里的类型的实例,这个参考

http://msdn.microsoft.com/zh-cn/library/z919e8tw%28v=vs.80%29.aspx

因为我没弄过

2、我想获得某个工程里的某一个类的类型

因为笔者用的多的是这种情况,所以就主要说些这类的东西。

一个简单的例子

三个类:

class Factory

{

virtual void Convert(){};

}

class AFactory:Factory

{

override void Convert(){};

}

class BFactory:Factory

{

override void Convert(){};

}

给两个客户上了程序,两个客户都有一个转换方法,客户一叫做张小二,客户二叫做jime.li,中英文名字差异,要不同的方法去转换,这时候怎么办?

写两个方法,如果你要是这么想的话,那么我觉得你的工资应该暂时无法提高了,设计模式中的抽象工厂模式听说过嘛,这个有点差不多的意思

            var kele = Assembly.Load("Test");

            var ass = kele.CreateInstance(String.Format("Test.{0}Factory",A或者B) as Factory;

这就能动态的产生一个类型了,然后可以使用它的override void Convert()了。一个方法解决了,当然这只是一个很简单的小例子

3、动态使用类成员的方法或者属性

简单的类:

class A

{

public static readonly temp="init";

public string Name

{

get;set;

}

 

public string GetCalc(string str)

{

return "";

}

}

 

main()

{

    var type = Type.GetType("Test.A,Test");;--Test是我的工程名,意思是获取这个工程

 string str=type.InvokeMember("Name", BindingFlags.SetProperty, null, null, new object[] { "5555555" }) as string //使用方法;

 type.InvokeMember("GetCalc",BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance,null,obj,new object[]{1})//设置属性;

 type.InvokeMember("temp", BindingFlags.SetField, null, null, new object[] { "5555555" }); //设置变量,就算是static readonly 照样设置

}

一般来说 如果你问一个.net老鸟,static readonly变量如何,得到回答肯定是不能更改,只能在构造函数中设置或者修改,但是反射能在类外进行修改,强大吧!

 

转载于:https://www.cnblogs.com/fish124423/archive/2012/05/16/2504258.html

你可能感兴趣的文章
Xcode的Instruments检测内存泄露方法(Leaks)
查看>>
n个矩阵连乘问题
查看>>
带权树的最短最长问题
查看>>
LYNC2013部署系列PART3:前端部署
查看>>
Apache XML-RPC Client Classes
查看>>
shell if [ -f .... ]
查看>>
djagon实战form数据库等操作
查看>>
ISIS的高级属性
查看>>
How To系列(二):how to baidu dork
查看>>
Nginx %00空字节执行任意代码(php)漏洞
查看>>
WordPress主题目录结构说明
查看>>
(总结)Nginx使用的php-fpm的两种进程管理方式及优化
查看>>
启动APACHE出现“error while loading shared libraries: libiconv.so.2”
查看>>
MFS文件系统安装指南
查看>>
查询dsjob
查看>>
Oracle与SQL Server互连
查看>>
JavaScript颜色选择器插件
查看>>
区块链和电子商务 | 大规模电子购物
查看>>
深入理解Fsync
查看>>
c++构造函数详解
查看>>