При доступе к свойству из кода - будь то внутри или вне класса - это всегда доступен в качестве свойства. В большинстве случаев это неважно - но это делает означает, что вы не можете передать его по ссылке, которую вы могли бы сделать, если бы это было поле.
только фрагмент кода, который получает доступ к области подложки непосредственно (отражения в стороне) является самим свойством.
Это свойство, чистое и простое. Он недоступен в качестве поля - он доступен как собственность. Компилятор C# не заменяет доступ к нему с доступом к полю. Доступ к нему всегда является доступом к свойствам. Конечно, он может быть встроен компилятором JIT, но это ничего особенного. Что касается CLR, это просто нормальное свойство (к которому применяется атрибут [CompilerGenerated]
).
Но для ответа на ваш первоначальный вопрос - да, автоматическое свойство означает, что вам не нужно декларировать поле поддержки самостоятельно. Фактически, это:
public int Foo { get; set; }
переводится в
private int <>Foo; // Or some other unspeakable name
public int Foo
{
get { return <>Foo; }
set { <>Foo = value; }
}
Вы не можете доступ генерируемое поле непосредственно в C# код, так как он имеет невыразимое имя. Вы увидите, что он присутствует, если вы исследуете тип с отражением, хотя - CLR не проводит различия между автоматически реализованным свойством и «нормальным».
Пожалуйста, сохраняйте ваш ответ. Не удаляйте его. – user196546
generixs: В будущем я прошу вас, пожалуйста, не просто выбрать первый правильный ответ, который вы видите. Это разочаровывает для многих из нас, когда новички делают это, потому что он, как правило, поощряет быстрые ответы и препятствует возможным лучшим ответам, которые занимают больше времени, что наносит ущерб основной цели StackOverflow. –
@ RayBurns. Извините, я буду избегать этого в будущем. Снова жаль. – user196546