以下のコードでは、なぜ XOR (^) を使用してコンポジションの構成メンバーのハッシュコードを結合しているのか疑問に思っていました (これは MonoCross 1.3 からのソースです)。
インスタンスを一意に識別するために、
MXViewPerspective
オブジェクトPerspective
とメンバーのビットごとの XOR が使用されていますか?ModelType
もしそうなら、XOR 操作のこのプロパティの名前はありますか (2 つの値 (つまり、ハッシュコード) を XOR することで一意性が保証される方法) はありますか?
public class MXViewPerspective : IComparable
{
public MXViewPerspective(Type modelType, string perspective)
{
this.Perspective = perspective;
this.ModelType = modelType;
}
public string Perspective { get; set; }
public Type ModelType { get; set; }
public int CompareTo(object obj)
{
MXViewPerspective p =(MXViewPerspective)obj;
return this.GetHashCode() == p.GetHashCode() ? 0 : -1;
}
public static bool operator ==(MXViewPerspective a, MXViewPerspective b)
{
return a.CompareTo(b) == 0;
}
public static bool operator !=(MXViewPerspective a, MXViewPerspective b)
{
return a.CompareTo(b) != 0;
}
public override bool Equals(object obj)
{
return this == (MXViewPerspective)obj;
}
public override int GetHashCode()
{
return this.ModelType.GetHashCode() ^ this.Perspective.GetHashCode();
}
public override string ToString()
{
return string.Format("Model \"{0}\" with perspective \"{1}\"", ModelType, Perspective);
}
}
ありがとうございました。