Что делает “частный” модификатор?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
25
задан Anas Alweish 25 May 2019 в 12:44
поделиться

13 ответов

Это для Вас (и будущие специалисты по обслуживанию), не компилятор.

28
ответ дан Michael Haren 15 October 2019 в 04:44
поделиться

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

Поэтому, если Вы хотите сделать его частным, используйте частный.

-1
ответ дан CodeRedick 15 October 2019 в 04:44
поделиться

Как Robert Paulson сказал в своем ответе, private, модификатор только используется на участниках, но также и на типы . Это становится важным, потому что значение по умолчанию для типов internal, который может протечь неумышленно, если Вы используете InternalsVisibleToAttribute.

1
ответ дан Community 15 October 2019 в 04:44
поделиться

Я обычно оставляю частными, но я нахожу его полезным для выстраивания в линию кода:

private   int    x;
public    string y;
protected float  z;

VS:

int x;

public    string y;
protected float  z;
1
ответ дан Mark Cidade 15 October 2019 в 04:44
поделиться

Некоторые стили кодирования рекомендуют поместить все "общедоступные" объекты сначала, сопровождаемый "частными" объектами. Без "частного" ключевого слова Вы не могли сделать этого тот путь вокруг.

Обновление: Я не заметил, что "c#" наклеивают это так, мой ответ применяется больше к C++, чем к C#.

1
ответ дан Greg Hewgill 15 October 2019 в 04:44
поделиться

Для симметрии и соответствовать стилям кодирования, который как все, чтобы быть явным (лично мне нравится он...)

2
ответ дан Rob Walker 15 October 2019 в 04:44
поделиться

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

1
ответ дан David Robbins 15 October 2019 в 04:44
поделиться

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

От Спецификация языка 3.0 C# (MSDN) Раздел 3.5.1

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

  • Пространства имен неявно имеют общедоступный объявленный модификатор доступа. Никакие модификаторы доступа не позволяются на объявлениях пространства имен.
  • Типы, объявленные в единицах компиляции или пространствах имен, могут иметь общедоступный или внутренний объявленный модификатор доступа и значение по умолчанию к внутреннему объявленному модификатору доступа.
  • у участников Класса может быть любой из пяти видов объявленного модификатора доступа и значения по умолчанию к частному объявленному модификатору доступа. (Обратите внимание, что тип, заявленный как член класса, может иметь любой из пяти видов объявленного модификатора доступа, тогда как тип, заявленный как член пространства имен, может иметь только общедоступный или внутренний объявленный модификатор доступа.)
  • у участников Структуры могут быть общедоступный, внутренний, или частный объявленный модификатор доступа и значение по умолчанию к частному объявленному модификатору доступа, потому что структуры неявно изолируются. Участники структуры представили в структуре (то есть, не наследованный той структурой) не мог защитить или защитить внутренний объявленный модификатор доступа. (Обратите внимание, что тип, заявленный как член структуры, может иметь общедоступный, внутренний, или частный объявленный модификатор доступа, тогда как тип, заявленный как член пространства имен, может иметь только общедоступный или внутренний объявленный модификатор доступа.)
  • у Интерфейсных участников неявно есть общедоступный объявленный модификатор доступа. Никакие модификаторы доступа не позволяются на интерфейсных объявлениях элемента.
  • у участников Перечисления неявно есть общедоступный объявленный модификатор доступа. Никакие модификаторы доступа не позволяются на объявлениях элемента перечисления.
5
ответ дан Mark Cidade 15 October 2019 в 04:44
поделиться

Как указано Jon Skeet в его книге C# Подробно , существует одно место в C#, где частное ключевое слово требуется, чтобы достигать эффекта.

, Если моя память служит правильно, частное ключевое слово является единственным способом создать конфиденциально ограниченного по объему метода get свойства или метод set, когда его противоположное имеет больше, чем частная доступность. Пример:

public bool CanAccessTheMissileCodes
{
    get { return canAccessTheMissileCodes; }
    private set { canAccessTheMissileCodes = value; }
}

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

7
ответ дан Jeffrey L Whitledge 15 October 2019 в 04:44
поделиться

Частный модификатор объясняет намерение.

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

закрытый метод А не предназначается для использования вне класса. Это может быть для внутренней функциональности только. Или Вы могли сделать конструктора по умолчанию частным для предотвращения конструкции класса, не передавая в значениях.

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

9
ответ дан Leah 15 October 2019 в 04:44
поделиться

Явность. Я никогда не использую значение по умолчанию и всегда явно добавляю модификатор.

Это могло быть из-за моего образования Java, где значение по умолчанию было 'пакетом' (примерно эквивалентный 'внутреннему' в C#) и таким образом, различие всегда беспокоило меня. Я нашел, что явность была предпочтительна.

я также использую ReSharper теперь, какие значения по умолчанию к тому, чтобы быть явным, таким образом, он только подтверждает и укрепляет мою предвзятость:)

15
ответ дан chadmyers 15 October 2019 в 04:44
поделиться

Существует определенное количество дезинформации здесь:

"Модификатор доступа по умолчанию не является частным, но внутренним"

ну, который зависит от того, о чем Вы говорите. Для членов типа это является частным. Для самих типов верхнего уровня это является внутренним.

"Частный только значение по умолчанию для методы на типе"

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

"На самом деле, если класс или структура не объявляются с модификатором доступа, это принимает значение по умолчанию к внутреннему"

Только для типов верхнего уровня. Для вложенных типов это является частным.

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

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

Eric Lippert идет с явной формой, и я начинаю склоняться это слишком.

См. http://csharpindepth.com/ViewNote.aspx?NoteID=54 для немного больше на этом.

68
ответ дан Jon Skeet 15 October 2019 в 04:44
поделиться

Для полноты. И некоторые люди на самом деле предпочитают быть явными в их коде о модификаторах доступа на их методах.

3
ответ дан Franci Penov 15 October 2019 в 04:44
поделиться
Другие вопросы по тегам:

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