计量单位如何表示?

svi*_*ick 7 f# units-of-measurement

我刚刚开始使用F#,我想知道测量单位:

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

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

Bri*_*ian 10

F#在编译程序集中的资源中存储"额外类型信息",F#编译器知道如何读取该资源.因此,虽然一个有区别的联合只是被编译成一个类,并且一个度量单位被删除为double,但是在汇编中的资源中有额外的F#特定类型信息,这样当F#编译器读取它时,它就可以重新构建额外的"F#元数据".

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