Car*_*ers 60 c# operator-overloading
我知道=操作员不能超载,但必须有办法在我这里做我想要的:
我只是创建代表定量单位的类,因为我正在做一些物理学.显然我不能只从一个原语继承,但我希望我的类的行为与原语完全一样 - 我只是希望它们的输入方式不同.
所以我可以去,
Velocity ms = 0;
ms = 17.4;
ms += 9.8;
Run Code Online (Sandbox Code Playgroud)
等等
我不知道该怎么做.我想我会写一些像这样的类:
class Power
{
private Double Value { get; set; }
//operator overloads for +, -, /, *, =, etc
}
Run Code Online (Sandbox Code Playgroud)
但显然我不能重载赋值运算符.我有什么方法可以得到这种行为吗?
Jon*_*eet 90
听起来你应该使用结构而不是类...然后创建一个隐式转换运算符,以及各种运算符来添加等.
这是一些示例代码:
public struct Velocity
{
private readonly double value;
public Velocity(double value)
{
this.value = value;
}
public static implicit operator Velocity(double value)
{
return new Velocity(value);
}
public static Velocity operator +(Velocity first, Velocity second)
{
return new Velocity(first.value + second.value);
}
public static Velocity operator -(Velocity first, Velocity second)
{
return new Velocity(first.value - second.value);
}
// TODO: Overload == and !=, implement IEquatable<T>, override
// Equals(object), GetHashCode and ToStrin
}
class Test
{
static void Main()
{
Velocity ms = 0;
ms = 17.4;
// The statement below will perform a conversion of 9.8 to Velocity,
// then call +(Velocity, Velocity)
ms += 9.8;
}
}
Run Code Online (Sandbox Code Playgroud)
(作为旁注......我不知道这是如何真正代表速度的,因为当然需要方向和幅度.)