zoukankan      html  css  js  c++  java
  • 程序集相关知识

            程序集包含:类型元数据(描述在代码中定义的每一类型和成员,二进制形式)。程集元数据(程序集清单、版本号、名称等)、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)



  • 相关阅读:
    Linux
    python中元类
    POJ 1182 食物链
    POJ 1733 Parity game
    top 介绍
    周记 2014.8.31
    windows10配置python
    oracle执行update时卡死问题的解决办法
    An Easy Introduction to CUDA C and C++
    super()
  • 原文地址:https://www.cnblogs.com/hanwenhuazuibang/p/2964133.html
Copyright © 2011-2022 走看看