反射
反射,可以实现动态晚绑定组件,大道理不说,实例说明问题。
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();
}
}
最后更新:2017-04-02 04:00:25