zoukankan      html  css  js  c++  java
  • 反射整理学习<二>

    使用 Assembly 类可以加载程序集、浏览程序集的元数据和构成部分、发现程序集中包含的类型以及创建这些类型的实例。

    若要获取 Assembly 对象(表示当前加载到应用程序域(例如,简单项目的默认应用程序域)中的程序集)的数组,可以使用 AppDomain ..::.GetAssemblies 方法。

    若要动态加载程序集, Assembly 类可提供下列静态方法(在 Visual Basic 中为 Shared 方法)。 程序集被加载到发生加载操作的应用程序域中。

    加载程序集的推荐方式是使用 Load 方法,该方法标识要由其显示名称加载的程序集(例如"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")。 搜索程序集时遵守 运行时如何定位程序集中描述的规则。

    使用 ReflectionOnlyLoad 和 ReflectionOnlyLoadFrom 方法可以为反射加载程序集,但不能为执行加载程序集。 例如,可以由在 32 位平台上运行的代码检查针对 64 位平台的程序集。

    LoadFile 和 LoadFrom 方法是为必须由路径标识程序集的极少数方案提供的。

    若要获取当前执行的程序集的 Assembly 对象,可以使用 GetExecutingAssembly 方法。

    Assembly 类的许多成员都提供有关程序集的信息。 例如:

    • GetName 方法返回一个 AssemblyName 对象,该对象提供对程序集显示名称部分的访问。
    • GetCustomAttributes 方法列出应用于程序集的属性。
    • GetFiles 方法提供对程序集清单中文件的访问。
    • GetManifestResourceNames 方法提供程序集清单中资源的名称。
    • GetTypes 方法列出程序集中的所有类型。 GetExportedTypes 方法列出对程序集以外的调用方可见的类型。 GetType 方法可用于在程序集中搜索特定类型。 CreateInstance 方法可用于在程序集中搜索和创建类型的实例。
     1 using System;
     2 using System.Reflection;
     3 
     4 namespace AssemblyTest
     5 {
     6     class Program
     7     {
     8         static void Main(string[] args)
     9         {
    10             try
    11             {
    12                 ShowAllLoadAssemblies();
    13                 LoadAssignAssembly();
    14             }
    15             catch (Exception ex)
    16             {
    17                 Console.WriteLine(ex.Message);
    18             }
    19             Console.ReadKey();
    20         }
    21         /// <summary>
    22         /// 获取当前的程序域中已经加载的程序集列表
    23         /// </summary>
    24         public static void ShowAllLoadAssemblies()
    25         {
    26             Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
    27             Console.WriteLine("当前的程序域中已经加载的程序集如下:");
    28             foreach (Assembly assembly in assemblies)
    29             {
    30                 Console.WriteLine(assembly);
    31             }       
    32         }
    33         /// <summary>
    34         /// 加载指定的程序集
    35         /// </summary>
    36         public static void LoadAssignAssembly()
    37         {
    38             Console.WriteLine("请输入一个程序集名:");
    39             string assembiyName = Console.ReadLine();
    40             //LoadFrom 方法是为必须由路径标识程序集的极少数方案
    41             Assembly a = Assembly.LoadFrom(assembiyName);
    42             Console.WriteLine("============================\n加载程序集{0}之后\n=========================================", a.FullName);
    43             //刷新显示当前已加载的程序集
    44             ShowAllLoadAssemblies();
    45             Console.WriteLine("==============================\n新加载程序集的信息\n=========================");
    46             Console.WriteLine("程序集全名:"+a.FullName);
    47             #region AssemblyName注释
    48             //GetName 方法返回一个 AssemblyName 对象,该对象提供对程序集显示名称部分的访问。 
    49             //AssemblyName 对象包含有关程序集的信息,在绑定到该程序集时可以使用此信息。 程序集的标识由以下部分组成:
    50             //简单名称。
    51             //版本号。
    52             //加密密钥对。
    53             //支持的区域性。 
    54             #endregion
    55             Console.WriteLine("程序集的版本"+a.GetName().Version);
    56             Console.WriteLine("程序集的初始位置:"+a.CodeBase);
    57             Console.WriteLine("程序集位置:"+a.Location);
    58             Console.WriteLine("程序集入口点:"+a.EntryPoint);
    59             Console.WriteLine("是否是在全局程序集缓存中:" + a.GlobalAssemblyCache);
    60             Console.WriteLine("公共语言运行时版本:"+a.ImageRuntimeVersion);
    61          
    62             //获取程序集的类型
    63             Type[] types = a.GetTypes();
    64             Console.WriteLine("\n该程序集包含如下类型:");
    65             foreach (Type type in types)
    66             {
    67                 Console.WriteLine("类型名:"+type.Name);
    68             }
    69 
    70             //获取程序集引用程序集信息
    71             AssemblyName[] assemblynames = a.GetReferencedAssemblies();
    72             Console.WriteLine("该程序集引用的所有程序集如下:");
    73             foreach (AssemblyName ass in assemblynames)
    74             {
    75                 Console.WriteLine(ass);
    76             }
    77         }
    78     }
    79 }
  • 相关阅读:
    Java Web 网络留言板2 JDBC数据源 (连接池技术)
    Java Web 网络留言板3 CommonsDbUtils
    Java Web ConnectionPool (连接池技术)
    Java Web 网络留言板
    Java Web JDBC数据源
    Java Web CommonsUtils (数据库连接方法)
    Servlet 起源
    Hibernate EntityManager
    Hibernate Annotation (Hibernate 注解)
    wpf控件设计时支持(1)
  • 原文地址:https://www.cnblogs.com/rohelm/p/2473388.html
Copyright © 2011-2022 走看看