Вы должны иметь возможность отфильтровывать не виртуальные методы, которые украшены вашим атрибутом, используя MethodInfo.IsVirtual
и MethodInfo.IsAbstract
, чтобы определить, является ли он абстрактным.
foreach(var assem in AppDomain.CurrentDomain.GetAssemblies())
foreach (var type in assem.GetTypes())
foreach (var mthdInfo in type.GetMethods())
{
if (mthdInfo.GetCustomAttributes(typeof(MyCustomAttribute), false) && mthdInfo.IsVirtual && !mthdInfo.IsFinal)
// This is a method you can use
}
Существуют способы обнаружения других перечисленных вами ограничений, и подход должен быть аналогичным.
РЕДАКТИРОВАТЬ: Исправлено, чтобы ответить на вопрос для методов.