zoukankan      html  css  js  c++  java
  • 关于反射

    1.1 反射的作用

    简单来说,反射提供这样几个能力:

    1、查看和遍历类型(及其成员)的基本信息和程序集元数据(metadata);

    2、迟绑定(Late-Binding)方法和属性。

    3、动态创建类型实例(并可以动态调用所创建的实例的方法、字段、属性)。序章中,我们所采用的那个例子,只是反射的一个用途:查看类型成员信息。接下来的几个章节,我们将依次介绍反射所提供的其他能力。

    2. 反射程序集

    在.net中,程序集是进行部署,版本控制额基本单位,它包含了ixanggua你得模块和类型,下面如何通过反射获取程序集信息。

    加载程序集

    Assembly asm = Assembly.LoadFrom("Demo.dll");

    Assembly asm = Assembly.Load("Demo");

    Assembly asm =Assembly.LoadFrom(@"C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.Web.dll");

    Assembly as = Assembly.GetExecutingAssembly();//返回当前执行的代码的程序集。

    获取一个Type类型实例后,我们还可以使用该实例的Assembly属性来获取其所在的程序集

    Type t = typeof(int)
    Assembly asm = t.Assembly;

    namespace Demo {
    
        public abstract class BaseClass {
           
        }
    
        public struct DemoStruct { }
    
        public delegate void DemoDelegate(Object sender, EventArgs e);
    
        public enum DemoEnum {
           terrible, bad, common=4, good, wonderful=8
        }
    
        public interface IDemoInterface {
           void SayGreeting(string name);      
        }
    
        public interface IDemoInterface2 {}
        
        public sealed class DemoClass:BaseClass, IDemoInterface,IDemoInterface2 {
    
           private string name;
           public string city;
           public readonly string title;
           public const string text = "Const Field";
           public event DemoDelegate myEvent;      
                  
           public string Name {
               private get { return name; }
               set { name = value; }
           }
    
           public DemoClass() {
               title = "Readonly Field";
           }
    
           public class NestedClass { }
    
           public void SayGreeting(string name) {
               Console.WriteLine("Morning :" + name);
           }
        }
    
    }
    public static void AssemblyExplore() {
        StringBuilder sb = new StringBuilder();
    
        Assembly asm = Assembly.Load("Demo");
    
        sb.Append("FullName(全名):" + asm.FullName + "
    ");
        sb.Append("Location(路径):" + asm.Location + "
    ");
    
        Type[] types = asm.GetTypes();
    
        foreach (Type t in types) {
           sb.Append("   类型:" + t + "
    ");
        }
    
        Console.WriteLine(sb.ToString());
    }

    调用此方法可以获得程序集中的类型的信息

    FullName(全名):Demo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null Location(路径):

    E:MyAppTypeExplorerSimpleExplorerinDebugDemo.dll

    模块: Demo.dll

    类型:Demo.BaseClass 

    类型:Demo.DemoStruct

    类型:Demo.DemoDelegate

    类型:Demo.DemoEnum

    类型:Demo.IDemoInterface

    类型:Demo.IDemoInterface2

    类型:Demo.DemoClass

    类型:Demo.DemoClass+NestedClass

    通过  

    Type t = typeof(DemoClass);

    TypeExplore(t);

    可以进一步获取类型里面的信息

    。Type类提供 GetMembers()、GetMember()、FindMember()等方法用于获取某个成员类型。

    111111
  • 相关阅读:
    css资料汇总
    typescript 点滴
    vue-cli3点滴
    item2的使用方法推介
    rfc文档
    websocket
    g2
    常用的正则积累
    Vue-20190623点滴
    写一个webpackLoader
  • 原文地址:https://www.cnblogs.com/whl4835349/p/9274763.html
Copyright © 2011-2022 走看看