gpt4 book ai didi

c# - 如何在 C# 中使用反射自定义方法列表

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

我一直在使用反射来创建用户将在动态生成的菜单中使用的方法列表(我是统一的)。我正在使用:

MethodInfo[] methodInfos =  myObject.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

但并不是该类的所有公共(public)方法都应该出现在这个菜单中,所以我想知道,是否有一些标志可以用来标记我需要的方法?

然后使用这个“自定义标志”通过反射获取那些方法。谢谢 :)。

最佳答案

使用自定义属性:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class MenuItemAttribute : Attribute
{
}

并允许用户标记方法:

public class Foo
{
[MenuItem]
public void Bar() {}
}

然后,在方法查找时,检查此属性的元数据:

var methodInfos = myObject
.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
.Where(_ => _.IsDefined(typeof(MenuItemAttribute)));

如果您需要为用户提供定义菜单路径的能力,然后使用自定义参数扩展您的属性,如下所示:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class MenuItemAttribute : Attribute
{
public MenuItemAttribute(string menuPath)
{
MenuPath = menuPath;
}

public string MenuPath { get; }
}

另一种选择是放弃制作插件的自定义方式,并使用开箱即用的东西,例如 MEF .

关于c# - 如何在 C# 中使用反射自定义方法列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32325159/

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