В C# в чем разница между public, private, protected и отсутствием модификатора доступа?
Всем привет! На протяжении всех моих лет в колледже я использовал модификатор доступа public
, и теперь хочу разобраться в разнице между public
, private
и protected
.
Также хотел бы узнать, что делает static
по сравнению с тем, если его нет. Заранее спасибо за помощь!
5 ответ(ов)
Public — Если вы можете видеть класс, то вы можете видеть и метод.
Private — Если вы часть этого класса, то вы можете видеть метод, иначе — нет.
Protected — То же самое, что и с Private, плюс все наследники тоже могут видеть этот метод.
Static (класс) — Помните различие между "Классом" и "Объектом"? Забудьте об этом. Они одинаковы, когда речь идет о "static"... класс является единственным и неповторимым экземпляром самого себя.
Static (метод) — Каждый раз, когда вы вызываете этот метод, он будет иметь ссылку, независимую от фактического экземпляра класса, к которому он принадлежит.
public — доступен любому, отовсюду.
private — доступен только изнутри класса, к которому он принадлежит.
protected — доступен изнутри класса или из любого объекта, который наследует от данного класса.
В VB нет ничего, что было бы эквивалентно null
.
static означает, что у вас есть один экземпляр этого объекта или метода для каждого экземпляра данного класса.
Статический метод позволяет обращаться к нему без создания экземпляра класса. Вы можете получить доступ к нему непосредственно из определения класса.
Будьте осторожны! Обратите внимание на доступность ваших классов. Публичные и защищенные классы и методы по умолчанию доступны для всех.
Также стоит отметить, что Microsoft не всегда явно показывает модификаторы доступа (такие как public, protected и т.д.) при создании новых классов в Visual Studio. Поэтому важно тщательно продумать доступность вашего класса, так как это "дверь" к вашим внутренним реализациям.
Относительно вопроса о Nothing:
- Типы пространства имен по умолчанию являются внутренними (internal).
- Любой член типа, включая вложенные типы, по умолчанию имеют уровень доступа private.
Как получить согласованное побайтовое представление строк в C# без ручного задания кодировки?
Как устранить предупреждение "Точек останова не удастся достичь. Символы не были загружены для этого документа"?
JavaScriptSerializer - Сериализация JSON перечислений в виде строк
Как установить заголовок Content-Type для запроса HttpClient?
Запрос прерван: Не удалось создать безопасный канал SSL/TLS