反射,可以实现动态晚绑定组件,大道理不说,实例说明问题。1.新建项目,项目结构如图:一个类库,一个网站;类库中包含2个类;
2.不添加引用,实现查看,调用类库中的方法,属性等;效果如图:
(访问类库中的类)
(访问指定类中的方法)
3.代码:①user1.cs,user2.cs两者都一样,只是类名不同。using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassLibrary1 { public class user1(user2) { string name = "这是一个程序集,恭喜您已经动态获取到了值!"; public string Name { get { return name; } set { name = value; } } short age; public short Age { get { return age; } set { age = value; } } public string GetName() { return this.Name; } } }
4.Default.aspx 的后台代码:using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; //引用反射的命名空间; using System.Reflection; namespace Demo { public partial class WebForm : System.Web.UI.Page { Assembly myObj; protected void Page_Load(object sender, EventArgs e) { //①加载程序集,路径为程序集所在的物理路径; myObj = Assembly.LoadFrom(@"E:/1.网站设计与开发/7.【睿智汇海.Net课程视频专区】/29. 反射/Demo/ClassLibrary1/bin/Debug/ClassLibrary1.dll"); } protected void Button2_Click(object sender, EventArgs e) { //将程序集中的方法动态绑定到下拉列表框; drl.DataSource =myObj .GetTypes(); drl.DataBind (); } protected void drl_SelectedIndexChanged(object sender, EventArgs e) { Type tp = myObj.GetType(drl.SelectedItem.Text);//获取类型; object sl = Activator.CreateInstance(tp);//创建实例; drlMethod.DataSource = myObj.GetType(sl.ToString()).GetMethods();//访问实例中的方法; drlMethod.DataBind(); } }