反射是什么?
刚接触反射,第一感觉就是。。应该和照镜子一样。。只是把人像放到镜子中和把类型(类,结构,委托,接口,枚举)放到运行的执行体中。
举个简单的例子。。
第一步:要先有人(类型);
一般一个解决方案都有好几个项目(系统是要分层的。。便于书写、管理、优化等),先添加一个类库IClassLibrary1(充当接口层)
添加一个接口Interface1.cs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IClassLibrary1
{
public interface Interface1
{
/// <summary>
/// 描述
/// </summary>
/// <returns></returns>
string Write(string name);
}
}
然后再添加一个类库ClassLibrary1(充当Dal层)
添加一个类Class1.cs(用自带的也行。。)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClassLibrary1
{
public class Class1:IClassLibrary1.Interface1
{
/// <summary>
/// 描述
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string Write(string name)
{
string str = name + "你好!";
return str;
}
}
}
注意:因为是两个不同的程序集。所以别忘了引用哟。。项目右键 添加引用————项目选项卡————IClassLibrary1找到添加就行了。
好了,现在人有了。。接下来是。
第二步:镜子中成像来观察自己(程序中反射来调用)
添加一个控制台程序(镜子),导入专有的命名空间using System.Reflection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
}
}
}
接下来就是开始反射了。。
别忘了在控制台这个程序中 添加IClassLibrary1,以及ClassLibrary1的引用哟。。方法和上面一样
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//这一步是关键;Load加载程序集CreateInstance查找指定类型并创建实例
object ass = Assembly.Load("ClassLibrary1").CreateInstance("ClassLibrary1.Class1");
//这个就是个显示转换咯,
IClassLibrary1.Interface1 ii=(IClassLibrary1.Interface1)ass;
//接口调用
string s=ii.Write("张三");
//输出
Console.WriteLine(s);
}
}
}
弄完后Ctrl+F5执行就OK了。。反射就是这么简单。。。因为Load()CreateInstance()中的路径让反射的类型更有了选择性。。让反射更强大了。。
以上均是个人理解。。初次写这东西。。手生。。不喜勿喷。。最主要一点:有错的话就留言指导。。谢谢