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 回答