2010-11-17 91 views
2

我想重写我的类的运算符*。我知道如何处理*为MyClass的* MyClass的,但我怎么能实现这个具有繁殖例如可能性:覆盖运算符c#

7 * MyClass的

7可以说,双和MyClass的是MyClass的对象,

感谢您的帮助

回答

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 ... 
} 
+3

还要注意的是7 * MyClass的是不一样的MyClass的* 7。你需要两个操作符重载来实现这一点。 – rein 2010-11-17 00:24:43

+0

没有其他方法可以写第二个运算符超负荷吗? – gruber 2010-11-17 00:47:58

+0

如果你想支持(双)*(MyClass),那么这就是你如何做到的。你听起来好像这不能解决你的问题 - 你有什么问题? – Bevan 2010-11-17 03:34:10

2

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

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

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