zoukankan      html  css  js  c++  java
  • C#程序集相关的概念

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


    欢迎关注我的公众号(同步更新文章)DoNet技术分享平台

    阅读原文

  • 相关阅读:
    codeforces 980A Links and Pearls
    zoj 3640 Help Me Escape
    sgu 495 Kids and Prizes
    poj 3071 Football
    hdu 3853 LOOPS
    hdu 4035 Maze
    hdu 4405 Aeroplane chess
    poj 2096 Collecting Bugs
    scu 4444 Travel
    zoj 3870 Team Formation
  • 原文地址:https://www.cnblogs.com/hgmyz/p/12352621.html
Copyright © 2011-2022 走看看