2016-04-04 190 views
3

我試圖重載==操作符,但我有以下錯誤:C#操作符重載==

Overloadable unary operator expected

這裏是我的代碼

public bool operator == (MyClass nm1) 
    { 
     return true; 
    } 

    public bool operator != (MyClass m2) 
    { 
     return true; 
    } 

我跟着msdn note,但仍然得到同樣的錯誤

+0

運算符方法是靜態的。這意味着'=='和'!='有兩個操作數。點擊同一頁面上的「操作員重載教程」鏈接。 –

+0

'公共靜態布爾運算符==(MyClass m1,MyClass m2)' – willaien

回答

4

當重載operator ==你應該做一個static方法,它採用兩個實例作爲參數:

public static bool operator == (MyClass leftSide, MyClass rightSide) { 
    return true; 
} 

public static bool operator != (MyClass leftSide, MyClass rightSide) { 
    return !(leftSide == rightSide); 
} 

static背景讓你的操作代碼感到更加「對稱」,在這個意義上,代碼執行比較不屬於左側實例或右側實例。

此外,static使操作符「虛擬化」成爲不可能(您仍然可以通過調用虛擬函數在實現中執行此操作,但必須明確執行)。

+0

ohh我明白了......第一個參數是左操作數嗎? – Kasparov92

+1

@ Kasparov92是的,第一個操作數是左側,第二個操作數是右側。 – dasblinkenlight

+0

@ Kasparov92是的,但順序應該不重要,因爲平等應該是對稱的。 – juharr

3

你需要static,你需要兩個參數,而不只是一個。

==!=總是二元運算符(兩個參數),而不是一元(一個參數)。

2

正如你可以在MSDN tutorial中看到的那樣,這些是二進制運算符,因此它們需要兩個參數。運營商也應該是靜態,因爲它們將是類的一部分,而不是實例。見this & this

public static bool operator == (MyClass nm1, MyClass mn2) 
{ 
    return true; 
} 

public static bool operator != (MyClass m1, MyClass m2) 
{ 
    return true; 
} 
0
public static bool operator == (MyClass m1, MyClass m2) 
    { 
     return true; 
    } 

    public static bool operator != (MyClass m1, MyClass m2) 
    { 
     return true; 
    } 
2

正確的簽名是:

public static bool operator ==(MyClass nm1, MyClass other) 
{ 

} 

public static bool operator !=(MyClass nm1, MyClass other) 
{ 

} 

第二個參數並不一定是MyClass類型雖然 - 但是它們中至少有一個必須是。