Лучше ли объявлять «приватное» поле частным или внутренним? - PullRequest
2 голосов
/ 14 апреля 2011

Лучше ли объявлять собственность частной или внутренней?И ... почему одно предпочтительнее другого?

Кто-то, с кем я работаю, все время объявляет "закрытые" поля внутренними, и я не вижу в этом смысла ... поэтому я должен что-то упустить.

ПРИМЕР:

/// Someone I work with does this
public class SomeClass
{
    internal Document _document;
    internal Contractor _contractor;
    internal IUser _user;
    internal Project _project;
}

/// I usually do this
public class SomeClass
{
    private Document _document;
    private Contractor _contractor;
    private IUser _user;
    private Project _project;
}

Ответы [ 3 ]

11 голосов
/ 14 апреля 2011

Поле и любой другой элемент должны быть объявлены с наиболее модифицированным модификатором доступа, который позволяет использовать элемент по мере необходимости.

  • internal разрешает использовать его только из одной сборки или из других сборок
  • private разрешит использовать его только из самого типа

Какой из них удовлетворяет вашим сценариям, тот, который следует выбрать.

Я предполагаю, что private здесь более уместно. Учитывая, что имя поля не соответствует .Net Design Guidelines, похоже, что оно предназначено для частного типа. Поэтому я хотел бы сделать его частным или дать ему подходящее имя.

4 голосов
/ 14 апреля 2011

Обычно чисто частное автоматически реализуемое свойство также может быть частным полем.

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

РЕДАКТИРОВАТЬ: Хорошо, теперь, когда мы говорим о полях, определенно, определенно сделать их частными. Неприватные поля должны быть невероятно редкими - почти единственное, что я могу придумать, это константы (будь то на самом деле const или просто только для чтения статические поля неизменяемого типа). Даже тогда я обычно использовал бы свойства. Просто иногда для игр и других критических для производительности ситуаций, стоит нарушать правила - но вы должны сначала понять и соблюдать эти правила.

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

2 голосов
/ 14 апреля 2011

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

Подробнее о внутреннем можно узнать здесь:

Практическое использование ключевого слова "internal" в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...