单声道 - 两种不同类型之间的二元运算符问题

时间:2015-04-24 07:15:49

标签: c# mono operator-overloading

美好的一天。我在Ububntu 14.04下使用Mono在C#中实现Complex类。当我绑定实现double和Complex之间的乘法时,我发现了一些奇怪的行为。 我的Complex实现类似于

using System;

namespace Mynamespace {
public class Complex {
public double re;//Real part
public double im;//Imaginary part


public Complex (double a, double b){
re = a;
im = b;
}

public static Complex operator *(double k, Complex x){
return new Complex (k * x.re, k * x.im);
}
}}

测试代码就像

...
Complex a = new Complex (1, 1);
double b = 2.0;
Complex c = b * a;
...

奇怪的行为是运算符*返回错误的结果。我注意到当调用*时,double类型的参数在函数中具有错误的值(我传递b = 2并且我看到参数k具有随机值)。

我还试图在不使用运算符的情况下实现该功能:

...
public Complex Multiply(double k){
return new Complex (k * re, k * im)
}
...

以及

...
public static Complex Multiply (double k, Complex x){
return new Complex (k * x.re, k * x.im)
}
...

但我获得alwais同样的行为。 我已经在.net(Windows7)的C#下尝试过,一切都运行良好。

有人对如何解决这个问题有任何建议吗?

祝你好运

费德里科

1 个答案:

答案 0 :(得分:0)

我用

之类的东西解决了这个问题
public static Complex operator *(object k, complex x){
return new ((double)k * x.re, (double)k * x.im);
}

现在一切顺利。如果您对我所遇到的问题有任何建议,欢迎他们。

祝你好运

费德里科