反射
反射,可以實現動態晚綁定組件,大道理不說,實例說明問題。
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