Области и вложенные пространства имен для C # - PullRequest
1 голос
/ 23 декабря 2011

У меня есть проект на C #, где есть два пространства имен, определенных в отдельных файлах, где одно является подмножеством другого:

namespace RSSTimerJob

namespace RSSTimerJob.Features.RSSFilter

У меня есть статический класс с именем Toolbox, который принадлежит 1-му пространству имен. Теперь, когда я пытаюсь вызвать защищенные статические переменные класса Toolbox из пользовательского класса во 2-м пространстве имен, я получаю сообщение о том, что он недоступен из-за уровня защиты.

Почему это дает мне эту ошибку. Поскольку 2-е пространство имен является подмножеством 1-го, не означает ли это, что создание защищенной переменной должно позволить классу 2-го пространства имен увидеть ее?

Конечно, установка переменных для public делает эту ошибку исчезающей, но мне просто любопытно:)

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

protected - это не то ключевое слово, которое вы хотите использовать.

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

В C # protected разрешает доступ базовым членам к классам, производнымс этой базы.Вы могли бы думать о Java, где protected немного отличается тем, что предоставляет доступ к подклассам и классам в одном и том же пакете.Чтобы получить примерно то же самое поведение в C #, вы должны использовать комбинацию protected internal, которая включает protected и internal, предоставляя доступ для производных классов , а также доступ для классов в том жесборка.

0 голосов
/ 23 декабря 2011

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

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

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

0 голосов
/ 23 декабря 2011

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

Я бы не стал сходить с ума с пространствами имен. Они полезны, если у вас есть много вещей, чтобы вставить их, и эти вещи достаточно разные. Вот некоторые рекомендации о лучших практиках пространства имен.

...