asp.net反射应用

反射的应用为了解藕程序,让程序日后的维护和二次开发时动用的代码部分很少。

要用到的命名空间using reflection

1.在程序运行时,(动态获取类或对象的信息)

动态 获取 加载程序集(Assmebly)

动态 获取 类型(如类、接口 等) - Type对象

动态 获取 类型的成员 信息(如方法,字段,属性等);

2.在运行时,动态创建类型实例(new),以及 调用 和 访问 这些 实例 成员;

创建的步骤:

1 获取当前的程序集方式:

1.1 获取当前的程序域的所有assembly : AppDomain.CurrentDomain.GetAssemblies()

1.2获取当前的对象的程序集:this.GetType().Assembly

1.3根据路径加载Assembly: Assembly.LoadFrom("路径") 或者 Assembly.load("当期的路径") 或 Assembly.LoadFile("路径")

2 获取Type对象 的方式

2.1通过类获取对应的Type :Type t=Typeof(Person)

2.2通过对象得Type t=p.GetType()

2.3通过程序集获得当前的类 Type t=assembly.GetType("类名")

2.4程序集的所有public 类 type[] t=assembly.GetExportedType()

2.5所有类 Type[] t=Assembly.GetTypes()

对象的创建

Type pigType = ass.GetType("PigLib.Pig", false, true);
object instance1 = Activator.CreateInstance(pigType);

//总结:ass.CreateInstance()和Activator.CreateInstance() 要求类拥有一个无参数的构造函数

//3.0 通过有参数的构造函数进行实例的创建工作
//3.0.1 获取Pig类型中的构造函数对象
ConstructorInfo cinfo = pigType.GetConstructor(new Type[] { typeof(string) });
//3.0.2 调用构造函数
object instancd2 = cinfo.Invoke(new object[] { "小黑" }); //object instancd2 =new Pig("小黑");

获取字段的和方法的使用

//2.0 从ass中获取Pig类的Type类型
Type pigType = ass.GetType("PigLib.Pig", false, true);

//3.0从Type中获取字段的对象 FielidInfo
//注意点:BindingFlags.Instance | BindingFlags.NonPublic 表示获取类中的实例非公有字段
//BindingFlags.Instance :表示一个实例字段 BindingFlags.Static:表示一个静态字段
// BindingFlags.NonPublic:非公有的字段 BindingFlags.Public:公有的字段
//重点注意:如果要使用则 BindingFlags.Instance | BindingFlags.NonPublic要在一起
FieldInfo nameInfo = pigType.GetField("_name", BindingFlags.Instance | BindingFlags.NonPublic);

//4.0 给_name字段赋值
object instance = Activator.CreateInstance(pigType); //ass.CreateInstance("PigLib.Pig");
nameInfo.SetValue(instance, "小白");

//5.0 获取_name字段的值
object res = nameInfo.GetValue(instance);

MessageBox.Show(res.ToString());

属性:
type.Assembly:获取type所在的程序集对象
type.FullName:获取type对象对应的类的全名称,命名空间.类名
type.Name:获取type对象对应类的 名称,不带有命名空间的
type.IsArray:判断type是否为一个数组类
type.IsEnum:判断type是否为一个枚举类
方法:
type.IsAssignableFrom(Type i) :判断i是否实现了接口 type
type.IsSubclassOf(Type father):判断type是否继承了 father
type.IsInstanceOfType(object o) :判断 o 是否为type类的实例

type.GetFiled("gender"):获取type中名为gender的字段对象
type.GetMethod("SayHi"):对象
type.GetProperty("Age"):获取type中名为 Age 的属获取type中名为 SayHi 的方法性对象

时间: 2024-11-06 03:26:59

asp.net反射应用的相关文章

ASP.NET反射

反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直接创建对象,即使这个对象的类型在编译时还不知道.     反射的用途:    (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例.     (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全

大家好

http://www.yugaopian.com/people/259723 http://www.yugaopian.com/people/259744 http://www.yugaopian.com/people/259783 http://www.yugaopian.com/people/259824 http://www.yugaopian.com/people/259839 http://www.yugaopian.com/people/259933 http://www.yugao

阿哥吗卡怪每次哦阿哥看啦过啦嘎开吃麻辣个啊蓝光

http://www.xx186.com/web/web_kpic.asp?id=156613http://www.xx186.com/web/web_kpic.asp?id=156608http://www.xx186.com/web/web_kpic.asp?id=156605http://www.xx186.com/web/web_kpic.asp?id=156602http://www.xx186.com/web/web_kpic.asp?id=156600http://www.xx18

风格更家霍建华

http://www.9ku.com/fuyin/daogaoo.asp?dgid=119864http://www.9ku.com/fuyin/daogaoo.asp?dgid=119867http://www.9ku.com/fuyin/daogaoo.asp?dgid=119876http://www.9ku.com/fuyin/daogaoo.asp?dgid=119879http://www.9ku.com/fuyin/daogaoo.asp?dgid=119883http://www

,了可美军以本合同个v分

http://shike.gaotie.cn/zhan.asp?zhan=%A1%FE%CE%F7%B0%B2%B8%B4%B7%BD%B5%D8%B7%D2%C5%B5%F5%A5%C6%AC%C4%C4%C0%EF%C2%F2Q%A3%BA%A3%B1%A3%B1%A3%B2%A3%B7%A3%B4%A3%B0%A3%B1%A3%B1%A3%B7%A3%B5%A1%F4 http://shike.gaotie.cn/zhan.asp?zhan=%A8%7D%CD%AD%B4%A8%B8%B4

asp.net网站三层架构详解和反射知识

项目文件架构 实现步骤为:4-3-6-5-2-1ID项目描述用途 项目引用关系 实例所需文件 相关方法 1 Web 表现层 Web页和控件 引用BLL WebUI.aspx WebUI.aspx.cs GetContent() 2 BLL 业务逻辑层 业务逻辑组件 引用 IDAL,Model,使用DALFactory创建实例 Content.cs ContentInfo GetContentInfo(int id) 3 IDAL 数据访问层接口定义 每个DAL实现都要实现的一组接口 引用 Mod

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十一) 代码重构使用反射工厂解耦

前言 自从此博客发表以及代码开源以来,得到了许多人的关注.也没许多吧,反正在我意料之外的.包括几位大牛帮我做订阅号推广,真的很感谢他们.另外,还有几个高手给我提了一些架构上的问题.其实本身这个项目是没有做什么架构设计的.只是简单分了分层.不过我在经过仔细思考之后决定对项目架构做些调整,当然在我的技术范围之内,我相信还会有第二次,第三次甚至更多重构,我希望把他变得更加完美. 重构思路 对于重构思路,我首先想到的是,让程序能够支持多种数据库,比如我现在用的是SQLServer,而好多朋友用MySQL

ASP.NET MVC中的控制器激活与反射之间的联系(帮助理解)

ASP.NET Mvc是ASP.NET的一个框架,同样也是基于管道的设计结构.HttpModule和HttpHandler是ASP.NET的两个重要组件,同样的在Mvc中也是非常重要的组件.在应用程序中的管道设计结构下实际上是由一系列的事件组合在一起的.这些事件可以有HttpModule来订阅,订阅的时机是在应用程序加载配置文件的时候,订阅web.config中httomodules配置的相关事件.而HttpHandler的作用就是最终的真正执行. 激活前准备首先要说的是路由系统一个Web应用程

asp.net 使用JQuery 调用Ashx 后面直接写方法名,通过反射找到对应的方法

using System.Reflection; public class Industry_Manager : IHttpHandler { HttpRequest gRequest = null; HttpContext gContext = null; HttpResponse gResponse = null; string func = string.Empty; string result = string.Empty; string pageUrl = string.Empty;