@antonwx

C# — как добраться до поля с помощью Reflection?

В общем у нас есть прямой доступ к классу Class1, который объявлен публично как Interface1. В этом Class1 есть приватный Class2, в котором есть приватный Class3, который объявлен как Interface3. В этом классе Class3 есть приватное поле secretImportantVariable, которое надо вытащить с помощью Reflection. Как это сделать? Я уже всю голову сломал.
class Main
    {
        public Interface1 int1;
        public Main()
        {
            int1 = new Class1();
        }
    }

class Class1 : Interface1
    {
        private Class2 hiddenClass2;
        public Class1()
        {
            hiddenClass2 = new Class2();
        }
    }

class Class2
    {
        private Interface3 hiddenClass3;
        public Class2()
        {
            hiddenClass3 = new Class3("a", "b", 1);
        }
    }

class Class3 : Interface3
    {
        private bool secretImportantVariable;
        public Class3(string a, string b, int c)
        {
            secretImportantVariable = (a == b);
        }
    }


Возможно объяснение довольно хреновое, но пытаться привести декомпилированные куски кода программы было бы куда хуже - пробираться придётся через такие же дебри.
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
var int1Type = int1.GetType();
var fieldAccessor = int1Type.GetField("hiddenClass2", BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic);
var hiddenClass2Value = fieldAccessor.GetValue(int1);

И так далее, пока не дойдёте до secretImportantVariable, который уже можно скастить к bool
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы