文字列、int、int32などのGetHashCodeメソッドをオーバーライドすることは可能ですか?
新しいオブジェクトやクラスを作成して、それをオーバーライドしたくありません。タイプのメソッドをオーバーライドする方法はあったのだろうか。拡張機能に似ていますが、実際にはそうではありません。
string myString = "sometext";
myString.GetHashCode(); -- I want to override this method.
文字列、int、int32などのGetHashCodeメソッドをオーバーライドすることは可能ですか?
新しいオブジェクトやクラスを作成して、それをオーバーライドしたくありません。タイプのメソッドをオーバーライドする方法はあったのだろうか。拡張機能に似ていますが、実際にはそうではありません。
string myString = "sometext";
myString.GetHashCode(); -- I want to override this method.
いいえ、あなたがすることはできません。拡張メソッドを追加した場合でも、インスタンスメソッドと同じシグネチャを持つ拡張メソッドが呼び出されている場合は、インスタンスメソッドが優先されます。また、延長することも、封印されているために延長string
することもできません。int
できる最善の方法は、独自の実装でGetHashCodeをオーバーライドするstring / intプロパティを使用して、まったく新しいクラス/構造体を作成することです(必要に応じて、暗黙の変換を提供することもできstring
ますint
。
別のクラスにある場合にのみ実行できると思います[http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in -c]
さらに、他のものがそのベースGetHashCode()を使用する可能性が高いため、グローバルに上書きしたくないと思います。
最後に、「なぜこれをしたいのですか?」と自問してください。本当に正当な理由がない場合は、それを行う必要はありません。
独自のクラスを作成したくない場合は、サブクラス内でのみオーバーライドが可能であるため、いいえ。
別の方法は、次のようなカスタム拡張メソッドを作成することです。
public static class MyExtensions
{
public static int GetHashCode2(this string s)
{
// Implementation
}
}
これも同様の効果がありますが、.GetHashCode2()
ではなく電話する必要があります.GetHashCode()