zoukankan      html  css  js  c++  java
  • C#反射和特性1 Type类

    大多数程序都要处理数据,包括读、写、操作和显示数据,但对于某些程序而言它们操作的数据不是数字、文字或图形,而是程序和程序类本身的信息。
    1、有关程序和其类型的数据被称为元数据,它们保存在程序的程序集中。
    2、程序在运行时,可以查看其它程序集或自身的元数据。一个运行的程序查看本身的元数据或其他程序的元数据的行为被称为反射。

    BCL声明了一个叫做Type的抽象类,它被设计用来包含类型的特性。这个类的对象能让我们获取程序使用的类型的信息。由于Type是抽象类,因此它不能有实例,而是在运行时,CLR创建从Type派生的类的实例,访问这些实例时,CLR不会返回派生类的引用而是Type基类的引用。

    对于程序中用到的每一个类型,CLR都会创建一个包含这个类型信息的Type类型的对象程序中用到的每一个类型都会关联到独立的Type类的对象,不管创建的类型有多少个实例,只有一个Type对象会关联到这些实例。

        class BaseClass
        {
            public int MyFieldBase;
        }
        class DerivedClass:BaseClass
        {
            public int MyFieldDerived;
        }
        class Program
        {
            static void Main(string[] args)
            {
                Type tbc = typeof(DerivedClass);
                Console.WriteLine("Result is {0}.", tbc.Name);
                Console.WriteLine("It has the following fields:");
                FieldInfo[] fi = tbc.GetFields();
                foreach (var f in fi)
                    Console.WriteLine($"{f.Name}");
                Console.ReadLine();
            }
        }

    输出:

    Result is DerivedClass.
    It has the following fields:
    MyFieldDerived
    MyFieldBase

     也可以通过程序集获取:

    var type = Assembly.GetExecutingAssembly().GetType("MetaData.BaseClass");

    输出:

    BaseClass

  • 相关阅读:
    docker 方式安装gitlab时,项目的clone地址及项目文件列表地址为机器名的问题解决办法
    CPU流水线
    Element中el-form嵌套el-table双击编辑提交检验
    java基础知识
    C#多线程下载
    mysql优化
    C++ 算法(一)
    前端vue 的面试总结 以及答案以及前端技术点面试
    C# 组合任务
    C# List去重DistinctBy扩展
  • 原文地址:https://www.cnblogs.com/NicolasLiaoran/p/12967748.html
Copyright © 2011-2022 走看看