如何爲我的類的實例定義運算符==
?我想是這樣的:如何覆蓋==運算符
public bool operator == (Vector anotherVector)
{
return this.CompareTo(anotherVector) == 1 ;
}
但它說:
重載一元算料
如何爲我的類的實例定義運算符==
?我想是這樣的:如何覆蓋==運算符
public bool operator == (Vector anotherVector)
{
return this.CompareTo(anotherVector) == 1 ;
}
但它說:
重載一元算料
您需要標記方法static
,你也必須執行不等於!=
。
public static bool operator ==(Vector currentVector,Vector anotherVector)
{
return currentVector.CompareTo(anotherVector) == 1 ;
}
您必須爲兩個對象實施==
。
和!=
和
public static bool operator !=(Vector currentVector,Vector anotherVector)
{
return !(currentVector.CompareTo(anotherVector) == 1) ;
}
參見:Guidelines for Overloading Equals() and Operator == (C# Programming Guide)
重載==操作符的實現不應該拋出異常。 任何重載operator ==的類型都應該重載operator!=。
'靜態'函數不能使用'this'。 –
問題中的「this」當然是爲了表示左邊的操作數。 –
@BenVoigt,我很滿意downvote和值得在這一個失蹤'這個'。但是我更關心'static'並執行'!=' – Habib
與C++,這允許使得左操作數成爲this
指針操作員被定義爲實例成員函數,C#運算符重載總是作爲靜態成員函數來完成。
指針不能有this
,兩個操作數都是顯式參數。
public static bool operator==(Vector left, Vector right)
{
return left.CompareTo(right) == 1;
}
(雖然這看起來語義上不正確,通常CompareTo
返回零爲等值)
然後我怎麼稱之爲比較? – user2128702
@ user2128702:這部分就像C++一樣。如果你有兩個向量'a'和'b',寫'if(a == b)'或'bool same =(a == b);' –
+1「語義上不正確。是啊。雖然認爲它應該重寫'Equals(Vector)',並以此來實現'=='。這是'回到左邊。等(右)'。 –
我Habib的回答完全同意 - 也+1 ...只是不要忘了處理空值。
public static bool operator ==(Vector left, Vector right)
{
if ((object)left == null)
return (object)left == null;
if ((object)right == null)
return false;
return ...;
}
太大,不能發表他的評論。希望這可以幫助。
運算符必須是靜態的。 – Jeremy