Использование частной собственности в C # vs fields

Многие люди следуют следующей парадигме:

всегда закрыты.

используются только для отображения полей, таким образом, должны быть только публичными. Существует множество исключений из этого правила (например, ленивая загрузка).

С авто-свойствами я нашел возможность никогда не использовать поля. Если мне нужно, чтобы мои поля были очень простыми, я просто использую авто-свойства

private int? ThisIsMoreOrLessAField { get; set; } // Actually a private property

Что вообще предпочтительнее? Некоторым людям нравятся поля, потому что, если кто-либо решит изменить поле и сделать его общедоступным, это очень плохой код и легко распознается в обзоре кода. Также легко посмотреть поля и признать, что он является закрытым для класса. Если ваши свойства могут быть частными, это нарушает эту парадигму. Вы должны провести дополнительную проверку, чтобы определить, является ли она общедоступной или частной.

Мне с трудом удается убедить себя в любом случае.

c#
3 голоса | спросил Triplell89 6 AMpFri, 06 Apr 2018 05:30:11 +030030Friday 2018, 05:30:11

1 ответ


4

Как сказал Роберт Харви, обычно предпочтительнее использовать поля для того, для чего они предназначены (личное состояние), и использовать свойства для того, для чего они предназначены (для публикации публичного API).

Два исключения, которые я нахожу на практике, следующие:

  • Производные поля, где вы делаете небольшую математику при получении и настройке. Конечно, вы можете использовать функции get и set, но если бы я хотел написать Java, я бы использовал Java.
  • Ситуации, в которых вам нужно отслеживать или запускать события при изменении полей. Простым примером является регистрация, когда поле изменяется или подсчитывается, когда что-то доступно. Я предполагаю, что это часто случается не в приложениях типа бизнес-типа, но это может быть распространено, если вы делаете что-то вроде разговоров с аппаратным устройством, где вы скрываете много деталей за интерфейсом, но нужно по-прежнему отслеживать эти поля с течением времени для отладки.

Обратите внимание, что в этих примерах происходит что-то еще, кроме get или set при использовании свойств. Свойства в C # - это в основном проницательный синтаксис, который обертывает getVar () и setVar (), как показано на Java и COM. В C # они предоставляют средства для введения некоторой логики при использовании свойств, но в противном случае они рассматриваются как обычные переменные.

Если у вас есть переменная без логики в наборе или get, используйте поле.

ответил whatsisname 6 AMpFri, 06 Apr 2018 06:01:08 +030001Friday 2018, 06:01:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132