とにかく、署名に基づくリフレクションを使用して、特定のクラスのすべてのメソッドの uniqueId を取得できますか? GetHashCode メソッドについては認識していますが、一意性を保証したいと考えています。
3 に答える
Type.FullName + MemberInfo.Name + メソッドの引数の型。それより短いものは一意ではありません。
特定のタイプにスコープを設定する場合は、タイプの FullName は必要ありません。実行時にのみ必要な場合は、MemberInfo オブジェクト自体がおそらく最適です。
どれだけユニークである必要がありますか?大きさは?
戻り値の型とすべての引数の型をカンマで連結すると、このシグネチャを一意に識別する文字列が得られます。たまたま署名を完全にエンコードすることもありますが、それは必ずしも悪いことではありません。
より短いものが必要な場合は、次のことができます。
- 暗号化ハッシュ関数を使用してハッシュします。遅い、ハッシュは長いが、一意である可能性が非常に高い
- 単純なハッシュ関数を使用してハッシュします。衝突が発生する可能性がありますが、ID は短くなっています。
- それらをある種のルックアップテーブルまたはデータベースに保存します。あなたのIDは単なる連続した整数です。
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().