C 反射學習

2021-07-09 08:29:43 字數 3214 閱讀 1780

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.linq;

using system.text;

using system.windows.forms;

using system.io;

using system.reflection;

namespace reflectionstudy

system.reflection.methodinfo minfo = null;

system.reflection.eventinfo eventinfo = null;

object instance = null;

type typedefine = null;

private void loadassembly()

).tostring();

//******************************帶兩個引數的方法***********************************

typedefine = new type[2];

typedefine[0] = type.gettype("system.string");

typedefine[1] = type.gettype("system.int32");

minfo = type.getmethod("writestring", typedefine);

//instance = assembly.createinstance("csstudy.reflection");

object objs = new object[2];

objs[0] = "有引數方法writestring";

objs[1] = 222;

string getwritestringvalue1 = minfo.invoke(instance, objs).tostring();

//******************************靜態方法的呼叫************************************

object staticvalue = new object[1];

staticvalue[0] = "靜態方法writename";

minfo = type.getmethod("writename");

string returnstatic = minfo.invoke(null, staticvalue).tostring();

//******************************返回無參方法的值***********************************

minfo = type.getmethod("writenopara");

string returnnullparammethod = minfo.invoke(instance, null).tostring();

//*************************設定或獲取屬性的值,欄位的值*****************************

//設定屬性的值

"ab").setvalue(instance,"abc", null);

//獲取屬性的值

string property = type.getproperty("ab").getvalue(instance, null).tostring();

//獲取欄位的值

string field = type.getfield("a").getvalue(instance).tostring();

//********************反射事件型別和繫結事件處理程式*******************************

minfo = type.getmethod("startevent", bindingflags.nonpublic | bindingflags.instance | bindingflags.public);

eventinfo = type.getevent("eventhandle");

eventinfo.addeventhandler(instance, new eventhandler(geteventhandle));

minfo.invoke(instance, null);

//*************************反射委託型別建立委託例項********************************

minfo = type.getmethod("startparamsevent", bindingflags.nonpublic | bindingflags.instance | bindingflags.public);

type deltype = type.getnestedtype("delemethod");

delegate del = delegate.createdelegate(deltype, instance, minfo);

object objec = del.dynamicinvoke(110);

//********************反射事件型別和建立委託例項**********************************

minfo = type.getmethod("paramsevents", bindingflags.nonpublic | bindingflags.instance | bindingflags.public);

deltype = type.getnestedtype("delemethod");

eventinfo = type.getevent("paramsevent");

del = delegate.createdelegate(deltype, this, "getdelresult");

eventinfo.addeventhandler(instance, del);

minfo.invoke(instance, new object );

}public void geteventhandle(object sender, eventargs e)

public string getdelresult(int i)

}}

C 反射學習

這天都在學習 c 的反射原理,網上的資料很多。以前聽說反射也僅僅是在 大話設計模式 裡面直到一點點,了解不深。開始我還不知道反射到底有什麼好處,後來我才知道利用反射我們可以在執行時的時候通過變數來例項化類的例項。可以有效避免了很多的邏輯判斷。以下是我的測試的 using system using s...

Java反射學習

應用在一些通用性較高的 中 框架的底層基於反射 在框架開發中,都是基於配置檔案開發,在配置檔案中配置子類,可以通過反射得到類中的所有內容,可以讓類中的某個方法執行 類中的所有內容 屬性 沒有引數的構造方法 有引數的構造方法 普通方法,都可以通過反射機制動態獲得。那麼接下來就看看怎麼通過反射來獲得類中...

php 反射學習

早知道php 有反射的概念一直沒抽出空來。今天看書裡面有個這玩意 弄個例子搞搞。不過似乎專案中用處不大。印象中似乎就 thinkphp 3.1 裡面的 控制器呼叫使用了反射 class person public function set name value public function get...