如何根据c#中的签名获取方法的唯一ID?

时间:2012-06-25 16:48:48

标签: c# .net reflection

无论如何,我可以使用基于其签名的反射为特定类中的每个方法获取uniqueId吗?我知道GetHashCode方法,但我希望保证唯一性。

3 个答案:

答案 0 :(得分:6)

Type.FullName + MemberInfo.Name +方法的参数类型,任何更短的都不是唯一的。

如果要将其范围限定为特定类型 - 不需要类型的FullName。如果只在运行时需要它 - MemberInfo对象本身可能是最好的。

答案 1 :(得分:3)

它有多独特?什么尺寸?

如果只使用逗号连接返回类型和每个参数类型,则会有一个唯一标识此签名的字符串。它也恰好对签名进行了完全编码,但这并不一定很糟糕。

如果你想要更短的东西,你可以:

  • 使用加密哈希函数对其进行哈希处理。慢,哈希很长,但很可能是唯一的
  • 使用简单的哈希函数对其进行哈希处理。可能会发生冲突,但Id更短。
  • 将它们存储在某种查找表或数据库中。您的ID只是顺序整数。

答案 2 :(得分:1)

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

方法名称:
System.Reflection.MethodBase.GetCurrentMethod()。名称

方法类型:
System.Reflection.MethodBase.GetCurrentMethod()。DeclaringType

方法参数:
System.Reflection.MethodBase.GetCurrentMethod()。GetParameters()。