2010-11-17 92 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