什么是反射
官方解释是指程序在运行状态中,对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意方法和属性。
反射实例
Persion.cs
public class Persion
{
public string Name { get; set; }
public int Sex { get; set; }
public string UserInfo(string key)
{
return "我是反射"+key;
}
}
使用反射
class Program
{
static void Main(string[] args)
{
Persion _persion = new Persion();
var addMethod = typeof(Persion).GetMethod("UserInfo");
string retval = (string)addMethod.Invoke(_persion,new object[] { "11111" });
Console.WriteLine(retval);
Console.ReadLine();
}
}
使用反射 dynamic版本
class Program
{
static void Main(string[] args)
{
dynamic dyn = new Persion();
string retval1 = dyn.UserInfo("11111");
Console.WriteLine(retval1);
Console.ReadLine();
}
}
为什么要使用反射
反射最大的好处就是能在运行期间,获得某个类的结构、成员变量,用来实例化
下列是具体使用场景:
场景一
假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。反射机制它知道类的基本结构,这种对类结构探知的能力。
场景二
比如你写了一个程序,这个程序定义了一些接口,只要实现了这些接口的dll都可以作为插件来插入到这个程序中。那么怎么实现呢?就可以通过反射来实现。就是把dll加载进内存,然后通过反射的方式来调用dll中的方法。
很多工厂模式就是使用的反射
反射的弊端
使用反射会比直接实例化调用方法的速度满
网友评论