Недостатки использования свойств только без соответствующих полей в.NET?

Как заявили dwc и Adam Jaskiewicz, виновник, скорее всего, убийца OOM. Тем не менее, следующий вопрос, который следует ниже: Как мне предотвратить это?

Есть несколько способов:

  1. Дайте вашей системе больше оперативной памяти, если вы можете (легко, если это ВМ)
  2. Убедитесь, что убийца OOM выбирает другой процесс.
  3. Отключить OOM Killer
  4. Выберите дистрибутив Linux, который поставляется с отключенным OOM Killer.

Я обнаружил, что (2) особенно легко реализовать благодаря этой статье .

7
задан Tony_Henrich 3 July 2009 в 20:37
поделиться

8 ответов

Сериализация с BinaryFormatter - у вас большие проблемы, если вам нужно изменить свойство на " стандартное свойство позже, например, чтобы добавить некоторую проверку / обработку событий / и т. д. - sinc BinaryFormatter использует имена полей. И вы не можете дублировать это, поскольку имя поля, которое генерирует компилятор, не может быть записано как допустимое C #.

Это хороший повод вместо этого взглянуть на сериализатор на основе контрактов. См. эту запись в блоге для получения дополнительной информации.

11
ответ дан 6 December 2019 в 07:07
поделиться

для всего проекта. У простых свойств нет недостатков. Компилятор создает для вас резервное поле. Эта запись в блоге объясняет, как компилятор обрабатывает автоматически реализованные свойства.

3
ответ дан 6 December 2019 в 07:07
поделиться

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

2
ответ дан 6 December 2019 в 07:07
поделиться

You can't create truly read only property, because you have to define both setter and getter. You can only use private setter to achieve pseudo-readonly property from outside.

Otherwise, as said above there are no other disadvantages.

5
ответ дан 6 December 2019 в 07:07
поделиться

На самом деле это не недостаток, но вы должны знать значения по умолчанию для автоматических свойств. В «классических» свойствах мы всегда использовали для инициализации вспомогательных полей, например, вот так:

private bool _flag = true;
public bool Flag
{
  get { return _flag; }
  set { _flag = value; }
}

Это сделало очевидным, какое значение свойства по умолчанию.

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

class MyClass
{
  public bool Flag { get; set; }
  public MyClass()
  {
    Flag = true;
  }
}

Это означает, что вы должны реализовать конструктор , если вы хотите инициализировать свои свойства не по умолчанию. значения или если свойство относится к ссылочному типу (классу).

Но, как я уже писал, я не считаю это недостатком, просто то, что вам нужно знать.

3
ответ дан 6 December 2019 в 07:07
поделиться

Ничего особенного. Только крайние случаи, например, когда вам нужно передать свойство методу, где параметр передается по ссылке ( ref или out ), что невозможно со свойством (потому что внутри это просто методы get_Property / set_Property, реализованные компилятором, а не какие-то специальные поля), и для этого вам понадобится явное закрытое поле поддержки.

РЕДАКТИРОВАТЬ: Да, и поддерживая свойства «no readonly », что на самом деле довольно часто.

1
ответ дан 6 December 2019 в 07:07
поделиться

Если вам не нужно выполнять какую-либо конкретную логику в методах доступа get и / или set, недостатков нет ...

0
ответ дан 6 December 2019 в 07:07
поделиться

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

0
ответ дан 6 December 2019 в 07:07
поделиться