3 回答
TA贡献1803条经验 获得超6个赞
听起来您应该使用结构而不是类...,然后创建隐式转换运算符,以及用于加法的各种运算符等。
这是一些示例代码:
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;
}
}
(作为一个旁注...我看不出它是如何真正代表速度的,因为肯定需要方向和幅度。)
TA贡献1797条经验 获得超4个赞
您可以创建隐式转换运算符。在MSDN上有一个页面,有一个很好的例子。
使它们成为不可变的结构也是一个好主意。这就是“原始体”的确切含义,这就是不可能从它们继承的原因。您需要一个结构,因为您需要值类型的语义,而不是引用类型的语义。您希望它们是不可变的,因为可变值类型通常不是一个好主意。
TA贡献1853条经验 获得超9个赞
我认为它不能重载,因为C#类都是从Object派生的,因此它们基本上是对象,并且当您使用赋值运算符时,基本上只是在引用另一个对象。另一方面,如果使用结构,则基本上需要所有信息,因此使用=运算符时,将复制所有字段。
所以我会说,面对它,并实现一个名为Copy()的函数,您应该没问题:-)
- 3 回答
- 0 关注
- 835 浏览
添加回答
举报