Вот структура:
MyClass: SuperClass2
SuperClass2: SuperClass1
superClass2 находится в Product.Web, а SuperClass1 находится в сборке .NET System.Web
I Я пытаюсь принудительно ввести значение в частное поле bool на SuperClass1. Но что бы я ни пытался, я не могу вернуть поля из отражения.
Я использую следующий код с разными комбинациями BindingFlag, но пока ничего не работает. SuperClass1 - абстрактный класс.
((SuperClass1)this).GetType().GetFields(System.Reflection.BindingFlags.NonPublic);
Примечания: Когда я использую GetProperties (), я получаю хороший большой список, но когда я указываю какие-либо привязки, я ничего не получаю, даже если есть соответствующие свойства. В чем дело?
Кроме того, поле не помечено как внутреннее
Очевидно, я бы использовал GetField (имя строки, BindingFlags), но я даже не могу заставить GetFlags () работать.
Обновление : Я пробовал добавить BindingFlags.Instance, как было предложено, но это не работает (как и ожидалось). Я возвращаю 2 поля, которые происходят от класса, унаследованного от SuperClass1. Возвращает null при использовании с GetField (имя строки, флаги)
Вот код для базового класса. Я пытаюсь получить поле для
public abstract class BaseValidator : Label, IValidator
{
private bool propertiesChecked;
...
}
Метод расширения:
/// <summary>
/// Returns the FieldInfo matching 'name' from either type 't' itself or its most-derived
/// base type (unlike 'System.Type.GetField'). Returns null if no match is found.
/// </summary>
public static FieldInfo GetPrivateField(this Type t, String name)
{
const BindingFlags bf = BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.DeclaredOnly;
FieldInfo fi;
while ((fi = t.GetField(name, bf)) == null && (t = t.BaseType) is Type)
;
return fi;
}