3

とにかく、署名に基づくリフレクションを使用して、特定のクラスのすべてのメソッドの uniqueId を取得できますか? GetHashCode メソッドについては認識していますが、一意性を保証したいと考えています。

4

3 に答える 3

6

Type.FullName + MemberInfo.Name + メソッドの引数の型。それより短いものは一意ではありません。

特定のタイプにスコープを設定する場合は、タイプの FullName は必要ありません。実行時にのみ必要な場合は、MemberInfo オブジェクト自体がおそらく最適です。

于 2012-06-25T16:52:46.133 に答える
3

どれだけユニークである必要がありますか?大きさは?

戻り値の型とすべての引数の型をカンマで連結すると、このシグネチャを一意に識別する文字列が得られます。たまたま署名を完全にエンコードすることもありますが、それは必ずしも悪いことではありません。

より短いものが必要な場合は、次のことができます。

  • 暗号化ハッシュ関数を使用してハッシュします。遅い、ハッシュは長いが、一意である可能性が非常に高い
  • 単純なハッシュ関数を使用してハッシュします。衝突が発生する可能性がありますが、ID は短くなっています。
  • それらをある種のルックアップテーブルまたはデータベースに保存します。あなたのIDは単なる連続した整数です。
于 2012-06-25T16:52:48.443 に答える
1

System.Reflection 名前空間の使用:
http://msdn.microsoft.com/en-us/library/system.reflection.aspx

メソッドの名前:
System.Reflection.MethodBase.GetCurrentMethod().Name

メソッドのタイプ
: System.Reflection.MethodBase.GetCurrentMethod ().DeclaringType

メソッドのパラメーター:
System.Reflection.MethodBase.GetCurrentMethod().GetParameters().

于 2012-06-25T16:54:56.590 に答える