我刚开始使用F#,我想知道计量单位:
我知道它们只在编译时出现,而Reflector确认了这一点:创建一个不是别名的度量单位会创建一个具有MeasureAttribute
属性的类,但除此之外,float<km/h>
代表如同System.Double
。并且类型,构造函数参数或属性没有属性。
到目前为止我明白了。但是当我从另一个项目引用编译的程序集时,它似乎知道所有关于度量单位的信息,包括别名。它是如何获得这些信息的?他们在集会中的哪个地方?
答案 0 :(得分:10)
F#在编译程序集的资源中存储“额外类型信息”,F#编译器知道如何读取该资源。因此,虽然一个有区别的联合只是被编译成一个类,并且一个度量单位被删除为double,但是在汇编中的资源中有额外的F#特定类型信息,这样当F#编译器读取它时,它就可以重新构建额外的“F#元数据”。
PowerPack有一个元数据阅读器,可让您以编程方式访问它。