度量单位是如何表示的?

7

我刚开始学习F#,对单位有些疑问:

我知道它们只存在于编译时,反射器也证实了这一点:创建一个不是别名的度量单位会创建一个带有 MeasureAttribute 属性的类,但除此之外,float<km/h> 被表示为普通的 System.Double。并且类型、构造函数参数或属性上没有任何属性。

到目前为止我都理解了。但当我从另一个项目中引用已编译的程序集时,它似乎已经了解了所有关于度量单位的信息,包括别名。它是如何获取这些信息的?它们在程序集的哪里?

1个回答

10
F#将"额外类型信息"存储在编译后的程序集资源中,F#编译器知道如何读取该资源。因此,尽管判别式联合仅编译为类,度量单位则被擦除为double,但是在程序集资源中存在F#特定的类型信息,因此当F#编译器读取它时,可以重建额外的"F#元数据"。 PowerPack有一个元数据阅读器,允许您以编程方式访问它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接