доступ к private полям через FieldInfo
От: bobbisson Россия http://fuzzy.ru/
Дата: 07.12.04 14:10
Оценка: :))
вчера копаясь в Reflection, наткнулся на любопытную фишку. оказывается, можно не только читать значения private-полей объекта, но и записывать их!

пишется просто

MyClass obj = new MyClass();
FieldInfo field = typeof(obj).GetField(fieldname, // fieldname - имя private-поля класса MyClass
    BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine("Field " + fieldname + " value: " + field.GetValue(data).ToString();
field.SetValue(obj,newvalue);
Console.WriteLine("Field " + fieldname + " new value: " + field.GetValue(data).ToString();


это что же получается??? можно не только читать private-поля, но и изменять их значения? то есть если у меня на счету есть 1 рубль, я могу через Reflection поменять это значение на миллион?

может, я чего не понял. наверняка должен быть механизм блокирования этой возможности. если кто знает, поделитесь? и еще, кстати, какие похожие "глюки" есть в .NET — возможность подменить метод в процессе исполнения, зарегистрировать обработчики на спрятанные события? и кто-то уже использовал эту возможность для мелкого хака?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.