C#程序集相关的概念

风格不统一 提交于 2021-01-06 22:56:03

   程序集包含:类型元数据(描述在代码中定义的每一类型和成员,二进制形式)。程集元数据(程序集清单、版本号、名称等)、IL代码(这些都被装在exe或dll中)、资源文件。每个程序集都有自己的名称、版本等信息,这些信息可以通过AssemblyInfo.cs文件来自己定义。


      获取一个类的类型  person p=new person();  Type  Type=p.getType();

      得到一个类的类型  Type type=typeof(Person);

      获取一个类型的父类   Type  type=s.GetType().BaseType;

      获取Person类型的所有方法(不包括私有方法)

         Person  p=new Person(); Type  personType=p.GetType();

         MethodInfo[]   methods=personType.GetMethods();

         foreach(var item in methods)

        { 

            Console.Writeline(item.Name);

        }

       获取一个类型的属性:

         PropertyInfo[]  properties=persontype.GetProperties();

      遍历数组的时候返回的类型为PropertyInfo

      获取一个类型的所有字段:FieldInfo[]  fields=typeof(Person).GetFiels();返回的类型为FieldInfo

      获取一个类中的所有成员:MemberInfo[]  members=typePerson.GetMembers();遍历数组时返回的类型为MemberInfo;


    通过反射调用方法:(定义的方法没有参数)

         1.获取一个类的Type

         2.获取我们要找的方法

        3.创建一个该类的对象

        4.调用方法

           Type  person=typeof(Person);

           MethodInfo  SayHi=peron.GetMethod("SayHi");

           object obj=Activator.CreateInstance(person);

           SayHi.Invoke(obj,null);

       通过反射调用方法(定义的方法有参数)

          Type  person=typeof(Person);

         MethodInfo  info=person.GetMethod("Say",new Type[]{typeof(string),typeof(string)});

         object obj=Activivator.CreateInstance(person);

         info.Invoke(obj,new obj[]{"大家好","大坏蛋"});


      调用一个带返回值的方法:

         Type personType=typeof(Perosn);

         MethodInfo info=personType.GetMethod("Add");//Add方法中返回的是一个int类型的方法

        object obj=Activator.CreateInstance(personType);

        object objreturn=info.Invoke(obj,new object[]{10,20});


      动态加载程序集:

         Assembly  asm=Assembly.LoadFile(@"E:\aa\程序集\程序集\ClassLibrary1\bin\Debug\ClassLibrary1.dll")

     获取程序集中所有类型的Type

        Type[]  types=asm.GetTypes();


    获取所有类型的public 类型的Type

     Assembly  adm=Assembly.LoadFile(文件的绝对路径);

      Type[] publictype=adm.GetExportTypes();


    获取指定的类型

      Type typePerson=asm.GetType("ClassLibrary1.Person");


    判断一个类型是否可以被另一个类型实例化

     typePerson.IsAssignableForm(typeChinese);


   考虑是一个类型是否为另一个类型的子类,返回的结果是一个bool类型

   typePerson.IsSubclassOf(typeChinese)



本文分享自微信公众号 - IT技术分享社区(gh_a27c0758eb03)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!