覆盖运算符c#

时间:2010-11-17 00:12:29

标签: c# .net-4.0

我想为我的班级重写operator *。我知道如何处理MyClass * MyClass的*但是我如何实现它以便有可能乘以例如:

7 * MyClass

7是让我们说双重,MyClass是MyClass的对象,

感谢您的帮助

2 个答案:

答案 0 :(得分:8)

当您为类提供运算符时,运算符实现的参数类型控制您正在处理的情况。

举例说明:

// Declare which operator to overload (+), the types 
// that can be added (two Complex objects), and the 
// return type (Complex):
public static Complex operator +(Complex c1, Complex c2) 
{
   return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}

此方法定义了如果要添加两个Complex数字时要执行的操作。

如果您尝试使用(例如)doubleComplex,则编译将失败。

在您的情况下,您只需声明两个版本:

public static MyClass operator *(MyClass c1, MyClass c2) 
{
   return ...
}

public static MyClass operator *(double n, MyClass c) 
{
   return ...
}

答案 1 :(得分:2)

在这种情况下,适当的签名是:

public static MyClass operator *(double a, MyClass b)

这意味着它需要double作为左侧,MyClass作为右侧,并返回MyClass