新聞中心
在網(wǎng)上查找了不少的資料,可以說大同小異,概念性的東西網(wǎng)上一搜一堆,今天把C#反射方法的東西整理了一下,供大家使用,我保證我這里是最全面的東西,當(dāng)然也是基礎(chǔ)的東西,在學(xué)好了這一切的基礎(chǔ)上,大家可以學(xué)習(xí)C#反射方法的具體插件等應(yīng)用,老鳥就不用看了。首先我們建立一個(gè)類庫,將它生成為HelloWorld.dll:

10年積累的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有陜西免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
- usingSystem;
- namespaceWebtest
- ...{
- publicinterfaceinterface1
- ...{
- intadd();
- }
- publicclassReflectTest:interface1
- ...{
- publicStringWrite;
- privateStringWritec;
- publicStringWritea
- ...{
- get
- ...{
- returnWrite;
- }
- set
- ...{
- Write=value;
- }
- }
- privateStringWriteb
- ...{
- get
- ...{
- returnWritec;
- }
- set
- ...{
- Writec=value;
- }
- }
- publicReflectTest()
- ...{
- this.Write="Write";
- this.Writec="Writec";
- }
- publicReflectTest(stringstr1,stringstr2)
- ...{
- this.Write=str1;
- this.Writec=str2;
- }
- publicstringWriteString(strings,intb)
- ...{
- return"歡迎您,"+s+"---"+b;;
- }
- publicstaticstringWriteName(strings)
- ...{
- return"歡迎您光臨,"+s;
- }
- publicstringWriteNoPara()
- ...{
- return"您使用的是無參數(shù)方法";
- }
- privatestringWritePrivate()
- ...{
- return"私有類型的方法";
- }
- publicintadd()
- ...{
- return5;
- }
- }
- }
然后,建立再建立一個(gè)項(xiàng)目引入該HelloWorld.dll:
- usingSystem;
- usingSystem.Threading;
- usingSystem.Reflection;
- classTest
- ...{
- delegatestringTestDelegate(stringvalue,intvalue1);
- staticvoidMain()
- ...{
- //AssemblyAssemblyt=Assembly.LoadFrom("HelloWorld.dll");與下面相同的效果
- AssemblyAssemblyt=Assembly.Load("HelloWorld");
- foreach(Typeaaaint.GetTypes())
- ...{
- //Console.Write(aaa.Name);//顯示該dll下所有的類
- }
- Module[]modules=t.GetModules();
- foreach(Modulemoduleinmodules)
- ...{
- //Console.WriteLine("modulename:"+module.Name);//顯示模塊的名字本例為"HelloWorld.dll"
- }
- Typea=typeof(Webtest.ReflectTest);//得到具體的類的類型,和下面一個(gè)效果
- //Typea=t.GetType("Webtest.ReflectTest");//
- //Console.Write(a.Name);
- string[]bb=...{"aaaa","bbbbb"};
- objectobj=Activator.CreateInstance(a,bb);//創(chuàng)建該類的實(shí)例,后面的bb為有參構(gòu)造函數(shù)的參數(shù)
- //objectobj=t.CreateInstance("Webtest.ReflectTest");//與上面方法相同
- MethodInfo[]miArr=a.GetMethods();
- foreach(MethodInfomi0inmiArr)
- ...{
- //Console.Write(mi0.Name);//顯示所有的共有方法
- }
- MethodInfomi=a.GetMethod("WriteString");//顯示具體的方法
- object[]aa=...{"使用的是帶有參數(shù)的非靜態(tài)方法",2};
- strings=(string)mi.Invoke(obj,aa);//帶參數(shù)方法的調(diào)用
- MethodInfomi1=a.GetMethod("WriteName");
- String[]aa1=...{"使用的是靜態(tài)方法"};
- strings1=(string)mi1.Invoke(null,aa1);//靜態(tài)方法的調(diào)用
- MethodInfomi2=a.GetMethod("WriteNoPara");
- strings2=(string)mi2.Invoke(obj,null);//不帶參數(shù)的方法調(diào)用
- MethodInfomi3=a.GetMethod("WritePrivate",BindingFlags.Instance|BindingFlags.NonPublic);
- strings3=(string)mi3.Invoke(obj,null);//私有類型方法調(diào)用
- //Console.Write(s3);
- PropertyInfo[]piArr=a.GetProperties
(BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public);- foreach(PropertyInfopiinpiArr)
- ...{
- //Console.Write(pi.Name);//顯示所有的方法
- }
- PropertyInfopi1=a.GetProperty("Writea");
- //pi1.SetValue(obj,"Writea",null);
- //Console.Write(pi1.GetValue(obj,null));
- PropertyInfopi2=a.GetProperty
("Writeb",BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public);- pi2.SetValue(obj,"Writeb",null);
- //Console.Write(pi2.GetValue(obj,null));
- FieldInfofi1=a.GetField("Write");
- //Console.Write(fi1.GetValue(obj));
- ConstructorInfo[]ci1=a.GetConstructors();
- foreach(ConstructorInfociinci1)
- ...{
- //Console.Write(ci.ToString());//獲得構(gòu)造函數(shù)的形式
- }
- ConstructorInfoasCI=a.GetConstructor(newType[]...{
- typeof(string),typeof(string)});
- //Console.Write(asCI.ToString());
- Webtest.interface1obj1=(Webtest.interface1)t.CreateInstance
("Webtest.ReflectTest");- Webtest.ReflectTestobj2=(Webtest.ReflectTest)t.CreateInstance("Webtest.ReflectTest");
- //Console.Write(obj1.add());典型的工廠模式
- foreach(Typettint.GetTypes())
- ...{
- if(tt.GetInterface("interface1")!=null)
- ...{
- Webtest.interface1obj3=(Webtest.interface1)Activator.CreateInstance(a);
- //Console.Write(obj3.add());
- }
- }
- TestDelegatemethod=(TestDelegate)Delegate.CreateDelegate
(typeof(TestDelegate),obj,"WriteString");- //動(dòng)態(tài)創(chuàng)建委托的簡單例子
- Console.Write(method("str1",2));
- Console.Read();
- }
- }
在這里我把我們常用的方法,屬性,等全部整理了出來,大家不要嫌棄亂,靜下心來,自己按照我的分隔一部分一部分的來,保證你對C#反射方法的學(xué)習(xí),會(huì)事半功倍.當(dāng)然有關(guān)于其方法我會(huì)繼續(xù)補(bǔ)充,想了這么些就先寫下來吧。
【編輯推薦】
- 定義C#接口學(xué)習(xí)經(jīng)驗(yàn)
- C# ListBox學(xué)習(xí)筆記
- 操作C# Dataset介紹
- C# ODBC訪問MySQL數(shù)據(jù)庫
- 淺析C#和Java不同點(diǎn)
網(wǎng)站標(biāo)題:C#反射方法學(xué)習(xí)總結(jié)
標(biāo)題路徑:http://fisionsoft.com.cn/article/cosjdhg.html


咨詢
建站咨詢
