F# 度量单位是如何表示的?

F# 度量单位是如何表示的?,f#,units-of-measurement,F#,Units Of Measurement,我只是从F#开始,我想知道度量单位: 我知道它们只在编译时出现,Reflector证实了这一点:创建一个不是别名的度量单位会创建一个具有MeasureAttribute属性的类,但除此之外,float表示为普通的System.Double。并且类型、构造函数参数或属性上没有属性 到目前为止我了解。但是,当我引用另一个项目中编译的程序集时,它似乎知道所有度量单位,包括别名。它是如何获得这些信息的?它们在程序集中的什么位置?F#将“额外类型信息”存储在已编译程序集中的资源中,并且F#编译器知道如何读

我只是从F#开始,我想知道度量单位:

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

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

F#将“额外类型信息”存储在已编译程序集中的资源中,并且F#编译器知道如何读取该资源。因此,当一个有区别的并集被编译成一个类,一个度量单位被删除成一个double时,程序集中的资源中有额外的特定于F的类型信息,因此当F编译器读取它时,它可以重新构造额外的“F元数据”

具有元数据读取器,可以通过编程方式访问它