c 反射的使用方法,不知道是不是最全的

2021-08-23 11:59:01 字數 2750 閱讀 6077

就不用看了。首先我們建立乙個類庫,將它生成為helloworld.dll,

usingsystem;

namespacewebtest

public

classreflecttest:inte***ce1

set}

privatestringwriteb

set}

publicreflecttest()

publicreflecttest(stringstr1,stringstr2)

public

stringwritestring(strings,intb)

public

static

stringwritename(strings)

public

stringwritenopara()

private

stringwriteprivate()

public

intadd() }}

然後,建立再建立乙個專案引入該helloworld.dll

usingsystem;

usingsystem.threading;

usingsystem.reflection;

classtest

modulemodules=t.getmodules();

foreach(modulemoduleinmodules)

//得到具體的類的型別,和下面乙個效果

typea=typeof(webtest.reflecttest);

//typea=t.gettype("webtest.reflecttest");//

stringbb=...;

//建立該類的例項,後面的bb為有參建構函式的引數

objectobj=activator.createinstance(a,bb);

//objectobj=t.createinstance("webtest.reflecttest");

methodinfomiarr=a.getmethods();

foreach(methodinfomi0inmiarr)

methodinfomi=a.getmethod("writestring");//顯示具體的方法

objectaa=...;

strings=(string)mi.invoke(obj,aa);//帶引數方法的呼叫

methodinfomi1=a.getmethod("writename");

stringaa1=...;

strings1=(string)mi1.invoke(null,aa1);//靜態方法的呼叫

methodinfomi2=a.getmethod("writenopara");

strings2=(string)mi2.invoke(obj,null);//不帶引數的方法呼叫

methodinfomi3= a.getmethod("writeprivate",bindingflags.instance|

bindingflags.nonpublic);

strings3=(string)mi3.invoke(obj,null);//私有型別方法呼叫

propertyinfopiarr=a.getproperties(bindingflags.instance

|bindingflags.nonpublic|bindingflags.public);

foreach(propertyinfopiinpiarr)

propertyinfopi1=a.getproperty("writea");

"writea",null);

propertyinfopi2=a.getproperty("writeb",

bindingflags.instance|bindingflags.nonpublic|bindingflags.public);

pi2.setvalue(obj,"writeb",null);

fieldinfofi1=a.getfield("write");

constructorinfoci1=a.getconstructors();

foreach(constructorinfociinci1)

constructorinfoasci=a.getconstructor(newtype...);

webtest.inte***ce1obj1=

(webtest.inte***ce1)t.createinstance("webtest.reflecttest");

webtest.reflecttestobj2=

(webtest.reflecttest)t.createinstance("webtest.reflecttest");

典型的工廠模式

foreach(typettint.gettypes())

}testdelegatemethod= (testdelegate)delegate.createdelegate(typeof(testdelegate),obj,

"writestring");

//動態建立委託的簡單例子

console.write(method("str1",2));

console.read();}}

在這裡我把我們常用的方法,屬性,等全部整理了出來,大家不要嫌棄亂,靜下心來,自己按照我的分隔一部分一部分的來,保證你對反射的學習,會事半功倍.當然有關於其方法我會繼續補充,想了這麼些就先寫下來吧.

我不知道是不是正確的

易蠻聞言翻了翻白眼,道 就你厲害,那你來說說這是怎麼回事,我來聽聽你的高見。敖潛見到自己可以大展拳腳,顯擺一下自己淵博的知識,頓時來了興致,他提高聲音,傲然開口道 小子,今天我就讓你見識一下真正的修真世界,有些事情可不是你這個門外漢可以理解的。這條河確實叫 黃泉 但是它不通向幽冥地府,因為幽冥地府根...

聽說發個部落格就有10個積分,不知道是不是真的

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

你不知道的C ToString方法

我們都知道,string型別的tostring方法在我們平時的程式設計中應用非常的廣泛,那麼,對於那些很有用但又很少用的方法,你又熟悉幾個呢?下面直接上 string str1 12345.tostring c string str2 12345.tostring n string a 123456...