Методы get_
и set_
для свойств также применяют к ним CompilerGeneratedAttributed
. Хотя нет сильной связи через атрибуты, существует соглашение об именах, используемое для полей поддержки свойства auto:
public string Foo { get; set;}
Создает член private string <Foo>k__BackingField
(здесь <
и >
являются частью имени, поскольку они допустимы в IL, но не в C #; они не имеют ничего общего с генериками).
В качестве примера получим список всех автоматических свойств в классе вместе с их полями поддержки:
t.GetProperties().Where(p =>
(p.GetGetMethod() ?? p.GetSetMethod()).IsDefined(typeof(CompilerGeneratedAttribute), false))
.Select(p => new
{
Property = p,
Field = t.GetField(string.Format("<{0}>k__BackingField", p.Name),
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance)
});