Как уже говорилось, если вам нужно сделать это, вы столкнетесь с проблемой дизайна с самого начала.Теперь, если вы хотите знать, возможно ли это просто ради знания, или если на Земле нет другого способа сделать это, это действительно возможно, с помощью очень маленькой вспомогательной библиотеки иметод расширения.
Рассмотрим следующий код:
class Person {
int age;
string name;
public int Age { get { return age; } }
public string Name { get { return name; } }
}
// ...
using Mono.Reflection;
using System.Reflection;
// ...
Person person = new Person (27, "jb");
PropertyInfo nameProperty = typeof (Person).GetProperty ("Name");
FieldInfo nameField = nameProperty.GetBackingField ();
nameField.SetValue (person, "jbe");
Используя этот код, вы можете получить поле поддержки свойства с помощью только свойства и назначить новое значение полю поддержки.,Вы можете прочитать более подробную информацию о реализации .
Также обратите внимание, что она работает только для простых свойств, таких как:
public int Age { get { return age; } }
public string Name {
get { return name; }
set { name = value; }
}
public double Velocity { get; private set; }
Если у вас есть сложные свойства с пользовательскимикод, преобразователь резервного поля не удастся.