元数据学习分享

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

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

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

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

  这本书经典的魅力狼烟!

  下面开始正题。

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

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

  大头要来了。

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

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

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

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

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

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

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

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

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

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

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

 

posted @ 2010-11-14 11:27  doo  阅读(375)  评论(0编辑  收藏  举报