程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#之反射總結

c#之反射總結

編輯:C#入門知識

 

首先要加載需要加載的程序集,然後找到指定的類型,進而往下進行動態加載。

要加載的程序集中的內容:

程序集中的內容

加載程序集:

              
             
             Assembly asm = Assembly.LoadFile();

 

獲得程序集下面的所有類型(包括私有的和internal)

 Type[] types =              ( item                   
                 Console.WriteLine( + item.Name +  + item.Namespace +  +             }

 

 獲得程序集下面所有的“公有”的類型

Type[] ExportedTypes= asm.GetExportedTypes();

 

 

 含有一個測試的Person類:

                  Name { ;            Age { ;      }

 

獲得Type的三種方法

             
             Person person =              Type type1 = 
             
             Type type2 =  
             
             Assembly asm = Assembly.LoadFile(             Type type3 = asm.GetType(); 

 

 

公有“屬性:

            Type asmType = asm.GetType(, , );
= ( item  + item.Name +  + item.PropertyType.Name +  + item.CanRead +  +

 

公有”方法:

             
             MethodInfo[] asmMenthods =              ( asmMethod                   Console.WriteLine(asmMethod.Name +  + asmMethod.DeclaringType.Name +             }

 

上面 動態獲得的都是“公有”,要想獲得私有的要進行設置

 

私有的方法:

             Type typePerson=             
             MethodInfo perMethod= typePerson.GetMethod(, BindingFlags.NonPublic |              obj =             perMethod.Invoke(obj, );             
             MethodInfo[] perMothods = typePerson.GetMethods(BindingFlags.NonPublic|BindingFlags.Instance);

 

動態獲得其他內容就不在演示,基本都一樣。

 

             
              classTarget = Activator.CreateInstance(asmType);

 

             
              pror = asmType.GetProperty(             pror.SetValue(classTarget, ,);
             Console.WriteLine(pror.GetValue(classTarget,));

 

             
             MethodInfo method = asmType.GetMethod(             method.Invoke(classTarget, );

 

 

首先獲得下面需要用到的類型

             Assembly asm = Assembly.LoadFile(             Type typePerson = asm.GetType(             Type typeChinese = asm.GetType(             Type typeIXiufuable = asm.GetType(             Type typeAbsClass = asm.GetType();

 

1》

 判斷方法裡的類型是否可以賦值給當前類型。(注意:接口和父類都可以)

              b1 = typePerson.IsAssignableFrom(typeChinese);
              b2 = typeIXiufuable.IsAssignableFrom(typeChinese);

 

判斷括號中的實例對象是否當前類型的實例。(

             
              objChinese = 
              b1 = typeChinese.IsInstanceOfType(objChinese);
              b2 = typePerson.IsInstanceOfType(objChinese);
              b3 = typeIXiufuable.IsInstanceOfType(objChinese);

 

 判斷當前類型是否是括號中類型的子類。(

              b1 = typeChinese.IsSubclassOf(typePerson);
              b2 = typeChinese.IsSubclassOf(typeIXiufuable);

 

 4》IsAbstract屬性

 判斷當前類型是否是抽象的。(注意:抽象的:是指只要不能實例化就是,比如:靜態類、密封類、接口等)

             Console.WriteLine(typeChinese.IsAbstract);
             Console.WriteLine(typePerson.IsAbstract);
             Console.WriteLine(typeIXiufuable.IsAbstract);
             Console.WriteLine(typeAbsClass.IsAbstract);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved