为什么没有 .NET RuntimePropertyHandle 和 PropertyInfo.GetPropertyFromHandle?
Why is there no .NET RuntimePropertyHandle and PropertyInfo.GetPropertyFromHandle?
我已经看到 Type
、FieldInfo
和 MethodInfo
的以下 .NET 类型和函数:
RuntimeTypeHandle th = ...;
Type t = Type.GetTypeFromHandle(th);
RuntimeFieldHandle fh = ...;
FieldInfo f = FieldInfo.GetFieldFromHandle(fh);
RuntimeMethodHandle mh = ...;
MethodInfo m = MethodBase.GetMethodFromHandle(mh);
但是,似乎没有对应的句柄类型和 Get...FromHandle
属性。有没有我没看到的,或者为什么这些不存在有什么充分的理由?
当我已经可以访问我感兴趣的属性的 属性 令牌时,必须使用 Type.GetProperty
查找 PropertyInfo
似乎非常低效。
如 coreclr 所示,属性和事件没有句柄,因此它们没有 Runtime...Handle
或 Get...FromHandle
。 "handle" 的想法在他们的上下文中是完全无效的。
至于为什么,我猜原因是属性和事件是纯粹的元数据的东西,而方法和字段要多得多。有用于访问方法、字段和类型的 CIL 操作码,但用于属性或事件的 none。使用它们被编译为 CIL,就像使用它们各自的访问器方法之一一样。它们实际上只不过是运行时的元数据片段,因此不需要句柄。
我自己问了一个similar question,属性和事件的解析方法真的很少。至于你的基本问题,我想枚举所有属性并寻找 MetadataToken
可能比使用 GetProperty
更有效,但我宁愿测试一下。
我已经看到 Type
、FieldInfo
和 MethodInfo
的以下 .NET 类型和函数:
RuntimeTypeHandle th = ...;
Type t = Type.GetTypeFromHandle(th);
RuntimeFieldHandle fh = ...;
FieldInfo f = FieldInfo.GetFieldFromHandle(fh);
RuntimeMethodHandle mh = ...;
MethodInfo m = MethodBase.GetMethodFromHandle(mh);
但是,似乎没有对应的句柄类型和 Get...FromHandle
属性。有没有我没看到的,或者为什么这些不存在有什么充分的理由?
当我已经可以访问我感兴趣的属性的 属性 令牌时,必须使用 Type.GetProperty
查找 PropertyInfo
似乎非常低效。
如 coreclr 所示,属性和事件没有句柄,因此它们没有 Runtime...Handle
或 Get...FromHandle
。 "handle" 的想法在他们的上下文中是完全无效的。
至于为什么,我猜原因是属性和事件是纯粹的元数据的东西,而方法和字段要多得多。有用于访问方法、字段和类型的 CIL 操作码,但用于属性或事件的 none。使用它们被编译为 CIL,就像使用它们各自的访问器方法之一一样。它们实际上只不过是运行时的元数据片段,因此不需要句柄。
我自己问了一个similar question,属性和事件的解析方法真的很少。至于你的基本问题,我想枚举所有属性并寻找 MetadataToken
可能比使用 GetProperty
更有效,但我宁愿测试一下。