我有一个代表一种数字的类型.在这种情况下,我正在使用兆瓦,所以我创建了一个名为Megawatt的类型.我希望能够像使用Int,Double或任何类型的c#数字类型一样使用这些兆瓦.这可能吗?如果是这样,我该怎么办?
例:
public class Megawatt{
public double Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望能够这样做:
var startOfDay = new Megawatts{value=100};
var endOfDay = new Megawatts{value=65};
Megawatt result = startOfDay - endOfDay;
Run Code Online (Sandbox Code Playgroud)
这可以使用DateTime ...您可以从另一个中减去一个DateTime并获得TimeSpan.我希望做类似的事情.
Eri*_*ert 31
除了到目前为止发布的好答案:你应该使你的类型成为一个不可变的结构而不是一个可变的值类型.这正是为不可变值类型设计的那种工作.
struct Megawatt
{
private double Value { get; private set; }
public Megawatt(double value) : this()
{
this.Value = value;
}
public static Megawatt operator +(Megawatt x, Megawatt y)
{
return new Megawatt(x.Value + y.Value);
}
public static Megawatt operator -(Megawatt x, Megawatt y)
{
return new Megawatt(x.Value - y.Value);
}
// unary minus
public static Megawatt operator -(Megawatt x)
{
return new Megawatt(-x.Value);
}
public static Megawatt operator *(Megawatt x, double y)
{
return new Megawatt(x.Value * y);
}
public static Megawatt operator *(double x, Megawatt y)
{
return new Megawatt(x * y.Value);
}
}
Run Code Online (Sandbox Code Playgroud)
等等.请注意,您可以将两兆瓦加在一起,但不能乘以两兆瓦; 你只能乘以双倍的兆瓦.
您还可以添加更多单元类型.例如,你可以创建一个MegawattHour类型和一个类型小时,然后说兆瓦时间小时给MegawattHour.你也可以说有另一种类型的Joule,并且有从MegawattHour到Joule的隐式转换.
有许多编程语言支持这些类型的操作,其冗长程度低于C#; 如果你做了很多这类事情,你可能会考虑F#.
Roy*_*mir 11
你应该编写自己的运算符重载:
样品:
public static Megawatt operator +(Megawatt c1, Megawatt c2)
{
return new Megawatt(c1.value+ c2.value);
}
Run Code Online (Sandbox Code Playgroud)