Ответ 1
Не так много различий между этими двумя фрагментами - вы не можете передать свойство по ссылке, например, но это редко бывает проблемой. Однако, если вы хотите, чтобы поле было только для чтения, например:
private readonly int _backingField;
public int Property { get { return _backingField; } }
то есть разница. Код, который я написал выше, не позволяет изменять значение в другом месте внутри класса, тем самым ясно, что это действительно означает, что он является неизменным. Мне бы очень хотелось объявить поле "только для чтения" с автоматическим внедрением свойства "только для чтения", которое может быть установлено только внутри конструктора, но недоступно на данный момент.
Это довольно запутанно, кстати:
Кроме того, я понимаю, что вы должны явно использовать поле backing в случае structs, вы не можете получить доступ к своим членам через свойства.
Что ты имеешь в виду? Вы можете определенно использовать свойства внутри structs. Вы говорите о поддерживающих полях, которые являются изменяемыми структурами, то есть разница между:
foo.someField.X = 10;
и
foo.SomeProperty.X = 10;
? Если это так, я обычно избегаю того, чтобы быть проблемой, заставляя мои структуры неизменно начинать с:)