Здравствуйте. В процессе изучения рефлексии задался вопросом, возможно ли записать значение в приватное поле. Логика подсказывает что да, возможно, но как это реализовать - одному богу известно. Итак, прикинем что у нас есть класс с приватным полем:
class MyClass
{
public string Hello = "Hello";
private string secondWord = " World";
private void Show()
{
Console.WriteLine(Hello secondWord);
}
}
Как заменить слово World на какое-то имя например?
Здравствуй. Логика не обманула, с помощью рефлексии можно также менять значения приватных полей (да-да, и не говори, магия). Представляю твоему вниманию код с реализацией вопроса:
class Program
{
static void Main(string[] args)
{
var instance = new MyClass();
Type type;
FieldInfo mystring = type.GetField("secondWord", BindingFlags.Instance | BindingFlags.NonPublic);
mystring.SetValue(instance , " Dude");
// Check
/*
MethodInfo Show = type.GetMethod("Show", BindingFlags.Instance | BindingFlags.NonPublic;
Show.Invoke(instance , new object[] { });
*/
Console.ReadKey();
}
}
Изучай. На канале ITVDN Александр Шевчук очень доступно преподнёс тему рефлексии. Я учил её именно по видео, усвоилось очень хорошо. Советую пересмотреть на досуге, если хочешь понимать шарп на уровне выше чем уровень университетов)
https://itvdn.com/ru/video/csharp-for-professional-renewed