反射,可以實作動态晚綁定元件,大道理不說,執行個體說明問題。
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.collections;
using system.configuration;
using system.data;
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();