在学习反射之前,先来理解以下几个概念。
1、什么是程序集?
2、使用程序集的好处?
3、什么是反射?
4、如何添加程序集的引用?
5、代码演示
新建一个空白解决方案,添加一个控制台应用程序和一个名为Common的类库。在Common里面添加一个Person类和Student类,代码如下
public class Person
{
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
private string tel;
public Person()
{
}
public string name{ get; set; }
public int age { get; set; }
public void SayHello() {
Console.WriteLine("我是Preson类里面的SayHello方法");
}
private void SayEnglish()
{
Console.WriteLine("我是Preson类里面的SayEnglish方法");
}
}
class Student
{
}
在Common右击选择生成,此时在Common下的bin/debug目录下生成了一个名为:Common.dll的程序集文件。将此文件复制到控制台应用程序下的bin/debug目录
执行结果:
加载程序集成功..
Common.Person
Person
Common
若使用 Type[] types = ass.GetTypes();结果为:
加载程序集成功..
Common.Person
Person
Common
Common.Student
Student
Common
//获得指定的数据类型
Type t = ass.GetType("Common.Person");
//获取Type中的所有方法
MethodInfo[] mis = o.GetType().GetMethods();
foreach (MethodInfo mi in mis)
{
Console.WriteLine(mi.Name);
}
// 获取属性
PropertyInfo[] pros = o.GetType().GetProperties();
foreach (PropertyInfo type in pros)
{
Console.WriteLine(type.Name);
}
//调用了Person类中默认的无参数的构造函数
object o = ass.CreateInstance("Common.Person");
// object o = Activator.CreateInstance(t, "zhangsan", 5);
Console.WriteLine(o.GetType()); //获取当前类的实例
MethodInfo mdi = o.GetType().GetMethod("SayHello");
mdi.Invoke(o,null);
持续更新....