zoukankan      html  css  js  c++  java
  • 元数据学习分享

      第一次看到元数据,觉得很陌生,到网上搜了一下,大多的解释都很抽象,看完了还是在云里雾里。

    昨天去书店逛了逛,看到一本好书,详细介绍了元数据,觉得很受用,现在正在学习。不敢独享,写点东西与大家分享。

    可能大鸟们会不屑一顾,还请指正。

      书名:CLR VIA C#美国人写的,为什么经典的东西都是外国人写的。中国人跑哪去了。是不是都在赚钱。

      这本书经典的魅力狼烟!

      下面开始正题。

    要把元数据说清楚,我得向前介绍点东西。很简单的东西。呵呵来了。

      你用C#,VB等开发语言,写好代码,都有各自的编译器,将源文件编译成中间语言,中间语言(IL)是相同的。它是面向CLR即运行时。运行时,CLR将IL编译成本地CPU指令。

      大头要来了。

      元数据可以理解成数据表,有两种:一种是描述源代码中的定义的类型和成员,如变量,函数,类等。另一种是:源代码引用的类型和成员,如你引用的别的命名空间下的变量,函数,类等。

    元数据是一个二进制数据块,由几个表构构成,分为三类:定义表,引用表,和清单表。

    下面给出简单说明定义表有哪些内容,你可能就有比较直观的印象了。

      你看到没?你代码里的所有东西几乎都在这个表里,不管是当前页面的代码还是你引用的代码,只要是一个模块里的东西,他都放在这里了。如果你不知道模块是什么东西,请你查查资料。也可以简单的把它理解成DLL,可以有一个文件组成,也可以由多个文件组成。

      元数据里具体内容的组织,格式啊。什么的,因为太麻烦,不想在这里放上来了。有兴趣可以找到这本书看看。

      如果你对元数据能够充分了解,你就不难理解反射,特性,垃圾处理,过滤之类的了。

    我简单说一下,你看你做的东西都在元数据里存着呢。CLR可以从元数据里获得所有信息,类的信息,方法的信息。

    反射不就是取得类的信息,然后新建相同的实例吗 ?你传进来类的名字,CLR根据类的名字,在元数据表里,找到对应的类,就可以自己创建实例了。

    你在类或者方法上加了特性,在元数据表里也有记录。CLR就知道这个类有这个特征了。可以在这个类上进行附加处理了。一般我们通过反射来知道这个类有哪些特性。这个不也是很好理解了吗 ?什么垃圾处理,过滤什么的。不都是这个原理吗 ?

      如果有不足的地方,还请大家指正。

    我可是花了不少时间,来画图,和总结。

  • 相关阅读:
    [转] 公共DNS,114.114.114.114和8.8.8.8
    [转] linux nc命令
    [转] Gitlab 8.x runner安装与配置
    HDFS 删除大量文件
    [转] java获取hostIp和hostName
    [转] scala中:: , +:, :+, :::, +++的区别
    Linux shell 中提取zip或jar文件中的某个文件
    [转] watch 命令使用(linux监控状态)
    [转] Citrix XenDesktop桌面登录VM提示Citrix Web插件错误
    Git sparse-checkout 检出指定目录或文件
  • 原文地址:https://www.cnblogs.com/doosmile/p/1876886.html
Copyright © 2011-2022 走看看