C#高级编程 - 小鸟系列之反射的用法

反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。 

下面通过一个例子来说明反射的基本用法

一. 创建一个类库(ReflectionTest)


新建类(JsFile.cs) 

public class JsFile
{
    public static string JQuery = "public/js/common/jquery-1.11.3.min.js";
    public static string helper = "public/js/common/helper.js";
    public static string category = "public/js/category/categoryIndex.js";
    public string categoryColor = "public/js/category/categoryColor.js";

    public string GetName(string name)
    {
        return "Hello:" + name;
    }
}

这时候在控制台程序里面添加引用这个类库,利用反射获取这个类库的信息

二. 主程序入口代码

static void Main(string[] args)
{
    //获取程序集
    Assembly asb = Assembly.LoadFrom(Directory.GetCurrentDirectory() + "/ReflectionTest.dll");
    //Assembly asb = Assembly.Load("ReflectionTest");  

    //获取ReflectionTest程序集下面的所有类
    Type[] typeClasses = asb.GetTypes();
    //Type document = asb.GetType("ReflectionTest.JsFile");   //获取指定的类

    foreach (Type typeClass in typeClasses)
    {
        //实例化类对象(有参数的话需要传递object参数)
        object docObj = Activator.CreateInstance(typeClass);

        //获取类里面的所有属性
        FieldInfo[] fieldsInfo = typeClass.GetFields();
        //FieldInfo fieldInfo = typeClass.GetField("JQuery");  //获取指定属性的信息

        foreach (FieldInfo item in fieldsInfo)
        {
            Console.WriteLine(item.GetValue(docObj));
        }

        //获取类里面的所有方法
        MethodInfo methodInfo = typeClass.GetMethod("GetName");
        //MethodInfo[] methodsInfo = typeClass.GetMethods();     //获取所有方法
        //参数
        object[] parameter = new object[] { "mike" };
        Console.WriteLine(methodInfo.Invoke(docObj, parameter).ToString());

    }
    Console.ReadKey();
}

三. 运行效果



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值