В C # в чем разница между публичным, приватным, защищенным и не имеющим модификатора доступа?

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

do(comboBox, () -> comboBox.setSelectedItem("Item Name"));

Для того, чтобы вышеприведенное работало, вам нужен следующий метод:

public static void do(final JComboBox<String> component, final Runnable f) {
    final ActionListener[] actionListeners = component.getActionListeners();
    for (final ActionListener listener : actionListeners)
        component.removeActionListener(listener);
    try {
        f.run();
    } finally {
        for (final ActionListener listener : actionListeners)
            component.addActionListener(listener);
    }
}
688
задан neaumusic 28 November 2018 в 19:19
поделиться

10 ответов

Модификаторы доступа

От docs.microsoft.com

общественность

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

частный

к типу или участнику может только получить доступ код в том же классе или структуре.

защитил

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

частный защищенный (добавленный в C# 7.2)

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

внутренний

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

защитил внутренний

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

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

Статичный

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

А статический класс является в основном тем же как нестатическим классом, но существует одно различие: статический класс нельзя внешне инстанцировать. Другими словами, Вы не можете использовать новое ключевое слово для создания переменной типа класса. Поскольку нет никакой переменной экземпляра, Вы получаете доступ к членам статического класса при помощи самого имени класса.

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

static class Foo()
{
    static Foo()
    {
        Bar = "fubar";
    }

    public static string Bar { get; set; }
}

Статические классы часто используются в качестве сервисов, можно использовать их как так:

MyStaticClass.ServiceMethod(...);
972
ответ дан Paul Hansen 29 November 2018 в 05:19
поделиться
  • 1
    А-ч, хороший для знания. Странно, это не работает, если я выполняю полное предложение в своем вопросе через Ваше решение. Какая-либо идея, почему? – Chris Wilson 1 January 2013 в 03:21

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

2
ответ дан Chazt3n 29 November 2018 в 05:19
поделиться

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

Также Microsoft не очень explict в показе модификаторов доступа (общественность, защищенная, и т.д. ключевые слова), когда новые классы в Visual Studio создаются. Так, проявите хорошую заботу и думайте о своей доступности Вашего класса, потому что это - дверь в Ваши внутренности реализации.

3
ответ дан Patrick Peters 29 November 2018 в 05:19
поделиться

Относительно вопроса Ничто

  • типы Пространства имен являются внутренними значением по умолчанию
  • , Любой участник типа, включая вложенные типы являются частными значением по умолчанию
22
ответ дан leppie 29 November 2018 в 05:19
поделиться
  • 1
    @Colin' tHart, Который походит на желаемое поведение, нет? – Ari B. Friedman 13 November 2013 в 17:32

Хм.

Посмотрите здесь: Модификаторы Доступа .

Вкратце:

Общественность дает методу или типу полную видимость от других типов/классов.

Частный позволяет только тип, содержащий закрытый метод / переменный доступ к закрытому методу/, переменная (обратите внимание, что вложенные классы также имеют доступ к содержанию классов частные методы/переменные).

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

"Ничто" не эквивалент VB.NET пустому указателю. Хотя, если Вы не обращаетесь ни к "чему" означающему "модификатор доступа", тогда это зависит, хотя очень грубое эмпирическое правило (конечно, в C#) - то, что, если Вы явно не определяете модификатор доступа, метод/объявление переменной обычно как , ограничил , как это может быть. т.е.

public class MyClass
{
    string s = "";
}

эффективно то же как:

public class MyClass
{
    private string s = "";
}

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

11
ответ дан ΦXocę 웃 Пepeúpa ツ 29 November 2018 в 05:19
поделиться

Общественность - Если Вы видите класс, тогда Вы видите метод

Частный - Если Вы часть класс, тогда Вы видите метод, иначе нет.

Защищенный - То же как Частные, плюс весь потомки могут также видеть метод.

Статичный (класс) - Помнят различие между "Классом" и "Объектом"? Забудьте все это. Они - то же со "статическим"... класс является one-only экземпляром себя.

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

156
ответ дан JosephStyons 29 November 2018 в 05:19
поделиться

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

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

8
ответ дан Johnny Bones 29 November 2018 в 05:19
поделиться

mmm...

Статичный означает, что можно получить доступ к той функции, не имея экземпляра класса.

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

4
ответ дан gbianchi 29 November 2018 в 05:19
поделиться

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

Статические участники один в классе и не один на экземпляр.

3
ответ дан jpfollenius 29 November 2018 в 05:19
поделиться

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

«Из приведенной выше таблицы мы можем увидеть различие между частным и защищенным ... я думаю, что оба они одинаковы .... так зачем нужны эти две отдельные команды»

Проверьте MSDN ссылка для получения дополнительной информации

4
ответ дан 22 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

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