C# で Windows ランタイム コンポーネントを作成しています。一部の型に IEquatable インターフェイスを実装したいと考えています。Equals メソッドをコンポーネントのコンシューマーに公開する必要はありません。単体テストでインスタンス間を比較できるようにしたいだけです。IEquatable はジェネリック型であるため、実装できません。最良の代替手段は何ですか?
質問する
253 次
2 に答える
2
残念ながら、2 つの winrt 型の間で詳細な比較を実装するメカニズムはありません :(.
于 2013-08-10T20:51:43.290 に答える
0
https://msdn.microsoft.com/EN-US/library/bsc2ak47(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharpによると
.Net Framework は、ToString()、Equals(Object)、および GetHashCode の既定の実装を WinRT 型に提供します。
デフォルトの EqualityComparer が IEquatable を実装しない型で使用される場合、デフォルトは Equals(Object) になります。
したがって、WinRT 型の IEquatable を模倣するには、型で Object.Equals をオーバーライドするだけです。これには、GetHashCode もオーバーライドする必要があります。
クラスの例を次に示します。
using System;
public sealed class BindableInt
{
public BindableInt(int i = 0)
{
Value = i;
}
public int Value { get; set; }
public string String
{
get
{
return Value.ToString();
}
}
public override bool Equals(object obj)
{
if (!(obj is BindableInt)) return false;
return Value.Equals(((BindableInt)obj).Value);
}
public override int GetHashCode()
{
return Value.GetHashCode();
}
}
于 2016-01-27T06:00:09.687 に答える