Как получить значение поля в базовом типе - PullRequest
1 голос
/ 10 января 2012

У меня есть класс, полученный из базового класса, который имеет приватное поле.Как я могу получить значение поля BaseType?

public class SuperClass : BaseClass
{
}

public class BaseClass
{
    private object theField;
}

У меня есть экземпляр SuperClass, и код должен быть примерно таким:

var baseType = super.GetType().BaseType;
var fieldInfo = baseType.GetField("theField", BindingFlags.NonPublic | BindingFlags.Instance);

Теперь, как я могу получить значение из fieldInfo?Или мой подход неверен?

1 Ответ

6 голосов
/ 10 января 2012

Использование FieldInfo.GetValue

fieldInfo.GetValue(this)

Кстати, вам не нужно super.GetType - вы можете просто сделать:

this.GetType().BaseType

Равно, так как вызнать базовый тип - возможно, это будет немного быстрее

typeof(BaseClass).GetField("theField" ....)

Обновление

Я использовал this, потому что ваш вопрос подразумевает, что код, который вы написали, является частью SuperClass, потому чтовы написали (несмотря на то, что это не является действительным C #):

var baseType = super.GetType().BaseType; 

Если это не так, и у вас есть экземпляр SuperClass, тогда это будет делать:

var obj = new SuperClass();
var privateValue = typeof(BaseClass).GetField("theField", 
  BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj);

Я бы на самом деле настоятельно рекомендовал бы против , используя obj.GetType().BaseType - потому что ваше отражение немедленно сломается, если вы решите ввести базу между SuperClass и BaseClass;тогда как использование typeof(BaseClass) не будет - если вы действительно не удалите BaseClass из дерева наследования SuperClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...