【发布时间】:2011-05-31 02:00:03
【问题描述】:
我知道= 运算符不能重载,但这里必须有一种方法可以做我想做的事:
我只是创建类来表示定量单位,因为我正在做一些物理学。显然我不能只从原语继承,但我希望我的类的行为与原语完全一样——我只是希望它们的类型不同。
这样我就可以走了,
Velocity ms = 0;
ms = 17.4;
ms += 9.8;
等等
我不知道该怎么做。我想我会像这样写一些类:
class Power
{
private Double Value { get; set; }
//operator overloads for +, -, /, *, =, etc
}
但显然我不能重载赋值运算符。有什么办法可以让我得到这种行为?
【问题讨论】:
-
你看过 F# 的
units of measure功能吗?它知道标准 (ISO) 单位,如 M、KG 和 M/S,它也可以使用单位进行计算。 -
绝对,我现在正在使用它。它不知道 ISO 单位,而是您自己定义单位,例如
[<Measure>] type m; [<Measure>] type s,然后可以使用let a = 9.8<m> / 4.3<s>之类的东西,从而产生val a : float<m/s> = 2.279069767 -
对不起,我的意思是说 SI 单位,这些单位是在
Microsoft.FSharp.Math.SI中预定义的。见:blogs.msdn.com/b/andrewkennedy/archive/2008/09/02/…