首先要加載需要加載的程序集,然後找到指定的類型,進而往下進行動態加載。
要加載的程序集中的內容:
程序集中的內容加載程序集:
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);