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

Все мои студенческие годы я использовал public и хотел бы знать разницу между public, private и protected?

И что же делает static, а не имеет ничего?

Ответы [ 15 ]

4 голосов
/ 05 марта 2009

ммм ...

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

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

3 голосов
/ 05 марта 2009

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

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

3 голосов
/ 05 марта 2009

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

Статические члены - один на класс, а не один на экземпляр.

2 голосов
/ 05 марта 2009

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

1 голос
/ 20 декабря 2017

C # имеет в общей сложности 6 модификаторы доступа:

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

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

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

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

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

C # 7.2 добавляет новый уровень доступности:

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

Источник, содержащий пример кода нового модификатора частного защищенного доступа

...