天天看點

反射

反射,可以實作動态晚綁定元件,大道理不說,執行個體說明問題。

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();