Компилятор из первого варианта сам сделает второй, так что разницы никакой, проще даже инкапсулировать через public int Data { get; set; }
не совсем, свойства сохраняются в метаданных, так что разница есть
Можно подробнее, или ссылку где это изучить?
Ну, если прям подробнее, то в ECMA-335, но если в кратце, то каждый тип в дотнете хранит информацию о своих членах. То есть какой бы язык не использовался, есть определённая стандартизированная форма, в которую всё скомпилируется. Свойства, методы, поля, они все различаются даже после компиляции. Некоторая информация стирается, некоторая остаётся доступной. Это имеет значение, если используешь рефлексию. Можно получить все методы, все поля, все свойства у типа и т.д. Если объявлено свойство, то можно по названию легко использовать и геттер и сеттер
Ещё, в C# 9 появился init-аксессор (который заменяет set), на методах такое не сделать. + в C# 11 должно появиться ключевое слово required, которое тоже только для свойств. Да и вообще конкретно от методов отличий много, в инициализаторах объектов можно использовать, в выражении with в новых версиях и т.п. Поэтому Get/Set методы вручную лучше не писать
Обсуждают сегодня