我有一堂课,里面有很多方法。
其中一些方法由自定义属性标记。
我想一次调用所有这些方法。
我将如何使用反射来查找该类中包含此属性的所有方法的列表?
我有一堂课,里面有很多方法。
其中一些方法由自定义属性标记。
我想一次调用所有这些方法。
我将如何使用反射来查找该类中包含此属性的所有方法的列表?
获得方法列表后,您将使用 GetCustomAttributes 方法循环查询自定义属性。您可能需要更改 BindingFlags 以适应您的情况。
var methods = typeof( MyClass ).GetMethods( BindingFlags.Public );
foreach(var method in methods)
{
var attributes = method.GetCustomAttributes( typeof( MyAttribute ), true );
if (attributes != null && attributes.Length > 0)
//method has attribute.
}
首先,您将调用typeof(MyClass).GetMethods()以获取在该类型上定义的所有方法的数组,然后循环遍历它返回的每个方法并调用methodInfo.GetCustomAttributes(typeof(MyCustomAttribute), true)到获取指定类型的自定义属性数组。如果数组长度为零,则您的属性不在方法上。如果它不为零,那么您的属性在该方法上,您可以使用MethodInfo.Invoke()来调用它。