public void Equals() { // 各要素の比較はできません。 var v1 = new Vector0(3, 4); var v2 = new Vector0(3, 4); var v3 = new Vector0(4, 3); var ec = EqualityComparer <Vector0> .Default; Assert.IsTrue(ReferenceEquals(v1, v1)); // ReferenceEquals と同じです。 Assert.IsTrue(v1 == v1); Assert.IsTrue(Equals(v1, v1)); Assert.IsTrue(v1.Equals(v1)); Assert.IsTrue(ec.Equals(v1, v1)); Assert.IsFalse(ReferenceEquals(v1, v2)); Assert.IsFalse(v1 == v2); Assert.IsFalse(Equals(v1, v2)); Assert.IsFalse(v1.Equals(v2)); Assert.IsFalse(ec.Equals(v1, v2)); Assert.IsFalse(ReferenceEquals(v1, v3)); Assert.IsFalse(v1 == v3); Assert.IsFalse(Equals(v1, v3)); Assert.IsFalse(v1.Equals(v3)); Assert.IsFalse(ec.Equals(v1, v3)); }
public void Equals() { // == 演算子は定義されていませんが、Equals で各要素を比較できます。 var v1 = new Vector0(3, 4); var v2 = new Vector0(3, 4); var v3 = new Vector0(4, 3); var ec = EqualityComparer <Vector0> .Default; // 値型では、参照としての比較結果はつねに false です。 Assert.IsFalse(ReferenceEquals(v1, v1)); // ReferenceEquals と同じです。 Assert.IsFalse((object)v1 == (object)v1); Assert.IsTrue(Equals(v1, v1)); Assert.IsTrue(v1.Equals(v1)); Assert.IsTrue(ec.Equals(v1, v1)); // コンパイル エラー。 //Assert.IsTrue(v1 == v1); Assert.IsFalse(ReferenceEquals(v1, v2)); Assert.IsFalse((object)v1 == (object)v2); Assert.IsTrue(Equals(v1, v2)); Assert.IsTrue(v1.Equals(v2)); Assert.IsTrue(ec.Equals(v1, v2)); Assert.IsFalse(ReferenceEquals(v1, v3)); Assert.IsFalse((object)v1 == (object)v3); Assert.IsFalse(Equals(v1, v3)); Assert.IsFalse(v1.Equals(v3)); Assert.IsFalse(ec.Equals(v1, v3)); }