JPt*_*eK9 2 c# double operator-overloading
有没有办法我可以重载基元,例如加倍的加倍?我想在执行操作时自动将双精度取整。我当前的代码是这样的:
class Test{
public static double operator +(double x, double y){
return Math.Round(x + y)
}
}
Run Code Online (Sandbox Code Playgroud)
但不幸的错误是“二进制运算符的参数之一必须是包含类型”。
不,这将是可怕的。使用您的库的用户会突然从其double变量中获得不同的行为!
但是,您可以编写和使用包装对象:
public struct MyDouble
{
public double Value {get; set;}
public MyDouble(double initValue)
{
Value = initValue;
}
public static double operator +(MyDouble x, MyDouble y){
return Math.Round(x.Value + y.Value)
}
}
Run Code Online (Sandbox Code Playgroud)
除其他选项外,您还可以使其可转换为双精度值。这样,用户就知道他们正在使用您的对象,并且对它们的数学运算进行四舍五入时不会感到惊讶。
如果要从简单的double进行赋值,则需要定义一个隐式运算符,类似于Nullable<T>(source)的隐式运算符:
public static implicit operator MyDouble(double value) {
return new MyDouble(value);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |