Отражение данных - PullRequest
       19

Отражение данных

0 голосов
/ 25 марта 2019

Как получить любой объект и его приватное поле, прочитать и затем вернуть

public class Person
{
    private string _password;


    }

    public string Name { get; set }

    public Gender man { get; set }

    public int Age { get; set }
}

Вот класс, из которого вы должны получить данные

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Все довольно просто.Вам нужно получить тип целевого объекта с помощью typeof или GetType(), если у вас есть экземпляр, как в этом случае.Затем вы можете использовать GetField, чтобы получить нужное поле.Но тут есть подвох.GetField по умолчанию ищет только те поля, которые являются открытыми и нестатическими.Чейз, что вам нужно дать ему BindingFlags.Пример:

public static string ReadPrivateField(object obj, string fieldName)
{
    var type = obj.GetType();
    // NonPublic = obly search for private fields.
    // Instance = only search for non-static fields.
    var field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
    return field.GetValue(obj) as string;
}
1 голос
/ 25 марта 2019

Сначала получите объект Type, получите его непубличные поля экземпляра с заданным именем. Затем вы можете получить значение от объекта. Пример:

public static string ReadPrivateField<T>(T obj, string fieldName)
{
    var type = typeof(T);
    var field = type.GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
    var value = field.GetValue(obj);
    return value as string;
}
...