7

我刚从 F# 开始,想知道计量单位:

我知道它们只在编译时出现,Reflector 证实了这一点:创建一个不是别名的度量单位会创建一个具有MeasureAttribute属性的类,但除此之外,float<km/h>它表示为 plain System.Double。并且类型、构造函数参数或属性上没有属性。

到目前为止我明白了。但是当我从另一个项目中引用已编译的程序集时,它似乎知道所有关于度量单位的信息,包括别名。它是如何获得这些信息的?他们在大会的什么地方?

4

1 回答 1

10

F# 将“额外类型信息”存储在已编译程序集的资源中,并且 F# 编译器知道如何读取该资源。因此,虽然一个有区别的联合只是被编译成一个类,而一个度量单位被擦除为一个双精度,但程序集中的资源中有额外的 F# 特定类型信息,因此当 F# 编译器读取它时,它可以重新构建额外的“F# 元数据”。

PowerPack有一个元数据阅读器,可让您以编程方式访问它。

于 2011-06-23T18:09:04.863 回答