Size: a a a

var chat = new Chat();

2021 September 22

АЧ

Алексей Чумаков... in var chat = new Chat();
Мне по названию
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
Поля найти подходящий backingField
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
И через него можно изменить значение
источник

Ɖ

Ɖrēw in var chat = new Chat();
Глядя на эксперемент выше это становится очевидно
$"<{propertyName}>k__BackingField"
+ это подтверждается гуглением
источник

Ɖ

Ɖrēw in var chat = new Chat();
Но никто не гарантирует что эти имена завтра не поменяются в компиляторе, например
источник

Ɖ

Ɖrēw in var chat = new Chat();
так что на свой страх и риск
источник

Ɖ

Ɖrēw in var chat = new Chat();
Можешь еще посмотреть в код Mono.Reflection, но опять таки, это моно, а не кор
https://github.com/jbevain/mono.reflection/blob/master/Mono.Reflection/BackingFieldResolver.cs
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
Type objectType = obj.GetType();

         var backingField = objectType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Single(x => x.Name.Contains(propertyName));

         backingField.SetValue(obj, newValue);
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
Да, так работает
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
С наследованием правда, нет
источник

Ɖ

Ɖrēw in var chat = new Chat();
Не будет работать если создать приватное поле которое в себе содержит имя свойства руками, будешь получать постоянно другое поле
источник

Ɖ

Ɖrēw in var chat = new Chat();
Не зря CIL имя этого поля содержит недопустимые для сишарпа < >
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
Точно
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
.Single(x => x.Name.Contains($"<{propertyName}>"));
источник

Ɖ

Ɖrēw in var chat = new Chat();
Ну вот так лучше, но опять таки, это все будет ненадежно, потому что автоматические имена могут поменяться если завтра захотят сделать другой паттерн для них, но лучше варианта не существует
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
И если поле унаследовано от другого класса, то не работает
источник

Ɖ

Ɖrēw in var chat = new Chat();
Приватные поля не наследуются
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
Свойство
источник

Ɖ

Ɖrēw in var chat = new Chat();
Ну и что. поле то у него приватное
источник

АЧ

Алексей Чумаков... in var chat = new Chat();
Точно
источник