Подтвердить что ты не робот

Частный набор или Частный член?

Мне было интересно, что считается лучшей практикой С#, частными/защищенными членами с публичными getters или публичными геттерами с частными/защищенными сеттерами?

       public int PublicGetPrivateSetter
       {
            get;
            private set;
        }

        private int _privateMember;

        public int PublicGetPrivateMember
        {
            get { return _privateMember; }
        }

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

Я не мог найти то, что считается лучшей практикой, или даже если он считается лучше, чем другой. Из того, что я видел обычно в 80% случаев (из кода, который я видел), люди DONT используют частные сеттеры... Я не уверен, что это происходит потому, что люди не знают о частных сеттерах или потому, что они считается лучше использовать частных членов.

EDIT:

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

4b9b3361

Ответ 1

Я предпочитаю использовать автоматически реализованные свойства, если реализация по умолчанию не делает то, что я хочу. Таким образом, в этом случае, поскольку автоматически реализованное свойство делает то, что вам нужно, просто используйте это:

public int Foo { get; private set; }

Однако возникает другая ситуация, если вы хотите создать поле readonly (это означает, что единственное место, где может быть установлено поле, находится в конструкторе). Затем вам нужно определить поле поддержки и пометить его только как прочитанное, так как это не поддерживается автоматически реализованными свойствами:

private readonly int foo;

public int Foo
{
    get { return foo; }
}

Ответ 2

Нет лучшей практики, о которой я знаю. Я знаю, что автоматические свойства были в основном для упрощения упрощения создания кода и связанных с LINQ.

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

Ответ 3

Это то же самое. В первом примере компилятор создает хранилище резервных копий. Во втором вы создали хранилище резервных копий. Поскольку реализация является внутренней для класса, рефакторинг один в другой не имеет большого значения. Такие инструменты, как Resharper, делают это тривиальным. Причина, по которой вы, вероятно, не видели частных разработчиков, - это то, что ее функция С# 3.0.

Ответ 4

В частных сеттерах нет ничего плохого. В большинстве случаев он используется с свойствами auto, чтобы сделать свойство readonly вне области объекта.

Ответ 5

Концептуально говоря, это ничего не меняет. Это в основном вопрос вкуса.

Я лично использую частный сеттер, потому что я ленив и много использую фрагмент propg. (вкладка вкладки propg)

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

Ответ 6

Нет хорошего ответа на этот вопрос. лучшая оценка - это следовать нашей номенклатуре compagnie, и если вы в одиночку, то, как вы предпочитаете

Ответ 7

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

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

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