91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中反射方法的用法

發布時間:2021-08-25 17:54:56 來源:億速云 閱讀:115 作者:chen 欄目:編程語言

這篇文章主要講解了“C#中反射方法的用法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#中反射方法的用法”吧!

首先我們建立一個類庫,將它生成為HelloWorld.dll:

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"您使用的是無參數方法";  }   privatestringWritePrivate()  ...{  return"私有類型的方法";  }    publicintadd()  ...{  return5;  }  }  }

然后,建立再建立一個項目引入該HelloWorld.dll:

  1. usingSystem;  

  2.  

  3. usingSystem.Threading;  

  4. usingSystem.Reflection;  

  5.  

  6.  

  7. classTest  

  8. ...{  

  9. delegatestringTestDelegate(stringvalue,intvalue1);  

  10.  

  11. staticvoidMain()  

  12. ...{  

  13. //AssemblyAssemblyt=Assembly.LoadFrom("HelloWorld.dll");與下面相同的效果  

  14. AssemblyAssemblyt=Assembly.Load("HelloWorld");  

  15.  

  16.  

  17. foreach(Typeaaaint.GetTypes())  

  18. ...{  

  19. //Console.Write(aaa.Name);//顯示該dll下所有的類  

  20. }  

  21.  

  22.  

  23. Module[]modules=t.GetModules();  

  24.  

  25. foreach(Modulemoduleinmodules)  

  26. ...{  

  27. //Console.WriteLine("modulename:"+module.Name);//顯示模塊的名字本例為"HelloWorld.dll"  

  28. }  

  29.  

  30.  

  31. Typea=typeof(Webtest.ReflectTest);//得到具體的類的類型,和下面一個效果  

  32.  

  33. //Typea=t.GetType("Webtest.ReflectTest");//  

  34. //Console.Write(a.Name);  

  35.  

  36.  

  37. string[]bb=...{"aaaa","bbbbb"};  

  38. objectobj=Activator.CreateInstance(a,bb);//創建該類的實例,后面的bb為有參構造函數的參數  

  39. //objectobj=t.CreateInstance("Webtest.ReflectTest");//與上面方法相同  

  40.  

  41.  

  42. MethodInfo[]miArr=a.GetMethods();  

  43. foreach(MethodInfomi0inmiArr)  

  44. ...{  

  45. //Console.Write(mi0.Name);//顯示所有的共有方法  

  46. }  

  47.  

  48.  

  49. MethodInfomi=a.GetMethod("WriteString");//顯示具體的方法  

  50. object[]aa=...{"使用的是帶有參數的非靜態方法",2};  

  51. strings=(string)mi.Invoke(obj,aa);//帶參數方法的調用  

  52.  

  53. MethodInfomi1=a.GetMethod("WriteName");  

  54. String[]aa1=...{"使用的是靜態方法"};  

  55. strings1=(string)mi1.Invoke(null,aa1);//靜態方法的調用  

  56.  

  57. MethodInfomi2=a.GetMethod("WriteNoPara");  

  58. strings2=(string)mi2.Invoke(obj,null);//不帶參數的方法調用  

  59.  

  60. MethodInfomi3=a.GetMethod("WritePrivate",BindingFlags.Instance|BindingFlags.NonPublic);  

  61. strings3=(string)mi3.Invoke(obj,null);//私有類型方法調用  

  62.  

  63. //Console.Write(s3);  

  64.  

  65.  

  66. PropertyInfo[]piArr=a.GetProperties
    (BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public);  

  67. foreach(PropertyInfopiinpiArr)  

  68. ...{  

  69. //Console.Write(pi.Name);//顯示所有的方法  

  70. }  

  71.  

  72.  

  73. PropertyInfopi1=a.GetProperty("Writea");  

  74. //pi1.SetValue(obj,"Writea",null);  

  75. //Console.Write(pi1.GetValue(obj,null));  

  76.  

  77. PropertyInfopi2=a.GetProperty
    ("Writeb",BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public);  

  78. pi2.SetValue(obj,"Writeb",null);  

  79. //Console.Write(pi2.GetValue(obj,null));  

  80.  

  81. FieldInfofi1=a.GetField("Write");  

  82. //Console.Write(fi1.GetValue(obj));  

  83.  

  84.  

  85. ConstructorInfo[]ci1=a.GetConstructors();  

  86. foreach(ConstructorInfociinci1)  

  87. ...{  

  88. //Console.Write(ci.ToString());//獲得構造函數的形式  

  89. }  

  90.  

  91. ConstructorInfoasCI=a.GetConstructor(newType[]...{

  92. typeof(string),typeof(string)});  

  93. //Console.Write(asCI.ToString());  

  94.  

  95.  

  96. Webtest.interface1obj1=(Webtest.interface1)t.CreateInstance
    ("Webtest.ReflectTest");  

  97. Webtest.ReflectTestobj2=(Webtest.ReflectTest)t.CreateInstance("Webtest.ReflectTest");  

  98. //Console.Write(obj1.add());典型的工廠模式  

  99.  

  100.  

  101. foreach(Typettint.GetTypes())  

  102. ...{  

  103. if(tt.GetInterface("interface1")!=null)  

  104. ...{  

  105. Webtest.interface1obj3=(Webtest.interface1)Activator.CreateInstance(a);  

  106. //Console.Write(obj3.add());  

  107. }  

  108. }  

  109.  

  110.  

  111. TestDelegatemethod=(TestDelegate)Delegate.CreateDelegate
    (typeof(TestDelegate),obj,"WriteString");  

  112. //動態創建委托的簡單例子  

  113. Console.Write(method("str1",2));  

  114. Console.Read();  

  115. }  

感謝各位的閱讀,以上就是“C#中反射方法的用法”的內容了,經過本文的學習后,相信大家對C#中反射方法的用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江津市| 滕州市| 玉门市| 禹城市| 星子县| 漳浦县| 沅江市| 马龙县| 丰都县| 武夷山市| 黄梅县| 勐海县| 莲花县| 江陵县| 尖扎县| 阿拉尔市| 乐昌市| 崇信县| 淮阳县| 张家界市| 资源县| 卢氏县| 东明县| 衡阳市| 阿克陶县| 措勤县| 天门市| 白山市| 钟祥市| 日喀则市| 昌吉市| 雷山县| 从化市| 公主岭市| 郑州市| 凤翔县| 威海市| 新宾| 隆回县| 秭归县| 临沂市|