Главный вопрос, который у меня есть: возможно ли в рефлексии отличить поле некоторого типа делегата от поля, которое используется событием в качестве поля хранения?Это сводится к вопросу: содержит ли класс FieldInfo информацию о том, принадлежит ли он к событию, как поле хранения?Я не могу найти ни свойств, которые могли бы рассказать, ни атрибутов custum.
В приведенном ниже коде соответствующие свойства обоих FieldInfos SomeField и SomeEvent идентичны.Поэтому я не знаю, как сортировать FieldInfos, основываясь на том, являются ли они eventstoragefields или нет.
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
namespace Test
{
class Program
{
public Action SomeField;
public event Action SomeEvent;
static void Main(string[] args)
{
FieldInfo[] fields = typeof(Program).GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
foreach (FieldInfo fi in fields)
Console.WriteLine(string.Format("FieldName: {0}, Accessibility: {1}, Has Attributes: {2}.", fi.Name, fi.Attributes,
fi.GetCustomAttributes(true).Length != 0));
Console.ReadLine();
}
}
}
Одним из решений является поиск eventInfo с точно таким же именем, но я не знаю, является ли этоЯ не был бы удовлетворен таким решением.Должен быть более прямой путь.