反射基础

在.NET Framework中,程序集包含模块,而模块包含类型,类型有包含成员,反射则提供了封装程序集,模块和类型的对象.程序员可以使用反射动态地创建类型的实例将类型绑定到现有对象,或从现有对象中获取类型,然后调用类型的方法或访问其字段和属性.使用反射可以:

1.获取模块(Module)信息

2.获取成员信息(MemberInfo) 

3.获取类型(Type)信息

4.获取字段信息(FileInfo)

5.获取事件信息(EentInfo)

6.获取属性信息(PropertyInfo)

7.获取参数信息(ParameterInfo)

使用反射时,必须考虑程序的性能,总的来说,使用反射来调用类型或触发方法,或访问一个字段或属性是,CLR需要做更多的工作:校验参数,检查权限等,所以速度是非常慢的.

eg.TestReflection类在构造函数中获取了当前程序集.函数Page_Load通过实例化TestReflection类reflection,然后显示当前程序集的模块信息,类型信息,成员信息.

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Reflection;

public partial class Default9 : System.Web.UI.Page
{
    public class TestReflection
    {
        public Assembly myAssembly;
        public TestReflection()
       {

         //获取程序集
         myAssembly = Assembly.GetExecutingAssembly();
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        TestReflection reflection = new TestReflection();
        foreach (Module m in reflection.myAssembly.GetModules())
        {

           //输出模块信息
            Response.Write("Module:" + m.Name + "<br>");
            foreach (Type t in m.GetTypes())
            {   //输出类型信息
                Response.Write("         Type:" + t.Name + "<br>");
                foreach (MemberInfo mi in t.GetMembers())
                {  //输出成员信息
                    Response.Write("   MemberInfo:" + mi.Name + "<br>");
                }
            }
        }
        Response.End();
    }
   
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值