gpt4 book ai didi

c# - 有没有办法判断方法是事件访问器还是属性访问器?

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:17 26 4
gpt4 key购买 nike

也就是说,给定一个 MethodInfo,我如何检查一个方法是属性的 getter 或 setter 还是事件的 adder 或 remover 或 firer(?),而不枚举所有Property/EventInfos 在包含类型中。编译器是否使用一些信息标记这些方法,以便让我知道我的 MethodInfo 何时是一个?

最佳答案

手动声明的方法与编译器生成的方法之间的至少一个区别是在其 MethodInfo 对象中存在 SpecialName 属性:

要找出该方法链接到哪个属性,您可以检查 PropertyInfo 对象以找到它们对应的 GetMethodSetMethod 属性,这将链接到这些方法。

示例 LINQPad程序:

void Main()
{
typeof(Test).GetProperties().Select(property => new { property.MetadataToken, property.Name, getter = property.GetMethod?.MetadataToken, setter = property.SetMethod?.MetadataToken }).Dump();
typeof(Test).GetMethods().Select(method => new { method.MetadataToken, method.Name, IsSpecial = (method.Attributes & MethodAttributes.SpecialName) != 0 }).Dump();
}

public class Test
{
public int Value
{
get;
set;
}
}

输出:

enter image description here

关于c# - 有没有办法判断方法是事件访问器还是属性访问器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com