Разница между свойством и полем в C # 3.0+

Если данные хранятся в смешанном или верхнем регистре в столбце type, то сравнение SQLite с учетом регистра не найдет их. Вы можете проверить по сохраненным данным или сравнить строки следующим образом:

WHERE type='order_book' COLLATE NOCASE ...
138
задан Community 23 May 2017 в 12:34
поделиться

6 ответов

Инкапсуляция.

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

Плюс они обнаруживаются по-другому в Intellisense :)

Править: Обновление для операции в секунду обновило вопрос - если Вы хотите проигнорировать другие предложения здесь, другая причина состоит в том, что это - просто не хороший дизайн OO. И если у Вас нет очень серьезного основания для того, чтобы сделать его, всегда предпочитайте свойство общедоступной переменной / поле.

115
ответ дан 23 November 2019 в 23:26
поделиться

Пара быстрых, очевидных различий

  1. Свойство может иметь ключевые слова средства доступа.

    public string MyString { get; private set; }
    
  2. Свойство может быть переопределено в потомках.

    public virtual string MyString { get; protected set; }
    
41
ответ дан 23 November 2019 в 23:26
поделиться

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

14
ответ дан 23 November 2019 в 23:26
поделиться

Первый:

public string MyString {get; set; }

свойство; второй ( public string MyString ) обозначает поле.

Различие, что определенные методы (привязка данных ASP.NET для экземпляров), только работы над свойствами, а не над полями. То же верно для Сериализации XML: только свойства сериализируются, поля не сериализируются.

7
ответ дан 23 November 2019 в 23:26
поделиться

Поля и свойства выглядят одинаково, но они не. Свойства являются методами и как таковой существуют определенные вещи, которые не поддерживаются для свойств и некоторых вещей, которые могут произойти со свойствами, но никогда в случае полей.

Вот список различий:

  • Поля могут использоваться в качестве входа к out/ref аргументы. Свойства не могут.
  • Поле будет всегда приводить к тому же результату при вызове многократно (если мы не учитываем проблемы с несколькими потоками). Свойство такой как DateTime.Now не всегда равно себе.
  • Свойства могут выдать исключения - поля никогда не будут делать этого.
  • Свойства могут иметь побочные эффекты или занять много времени действительно для выполнения. Поля не имеют никаких побочных эффектов и всегда будут с такой скоростью, как может ожидаться для данного типа.
  • Свойства поддерживают другую доступность для методов считывания/методов set - поля не делают (но поля могут быть сделаны readonly)
  • При использовании отражения свойства и поля рассматривают как отличающиеся MemberTypes таким образом, они расположены по-другому (GetFields по сравнению с GetProperties например)
  • JIT-компилятор может рассматривать доступ свойства очень по-другому по сравнению с доступом к полю. Это может однако скомпилировать вниз в идентичный собственный код, но объем для различия там.
155
ответ дан 23 November 2019 в 23:26
поделиться

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

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

Думайте о свойствах как о синтаксическом сахаре для getXXX ()/setXXX () функции. Это - то, как они реализованы негласно.

3
ответ дан 23 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

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