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技术分享平台

    阅读原文

  • 相关阅读:
    [Tutorial] How to check and kill running processes in Ubuntu
    [Tutorial] Getting started with Gazebo in ROS
    Linux基础命令
    Linux安装系统
    vue 前后端数据交互问题解决
    如何在cmd中启动MongoDB服务器和客户端
    selenuim模块的使用 解析库
    beautifhulsoup4的使用
    浅谈scrapy框架安装使用
    自动登录 点赞 评论 抽屉网
  • 原文地址:https://www.cnblogs.com/hgmyz/p/12352621.html
Copyright © 2011-2022 走看看