Модификаторы внутреннего доступа C#

Я хочу запечатать классы в пространстве имен. Я смотрел на модификатор доступа «внутренний», но он, похоже, только ограничивает классы в сборке. Могу ли я запечатать классы в пространстве имен?

Или мне нужно переместить материал в отдельную сборку? Но тогда у меня возникнет проблема, связанная с отказом Visual Studio от циклических ссылок на сборку.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
3 246
3

Ответы 3

Вы по-прежнему можете использовать ключевое слово internal и предоставлять внутренние классы другой сборке через атрибут Внутреннее устройство в файле AssemblyInfo.cs.

За исключением того, что [InternalsVisibleTo] все еще находится на уровне сборки, а не на уровне пространства имен.

Marc Gravell 19.01.2009 12:53

Это правда. Но что я знаю, это невозможно сделать на уровне пространства имен?

Patrik Svensson 19.01.2009 12:55

Это невозможно с C#.

Члены уровня пространства имен могут быть только public или internal.

Однако вы можете использовать вложенный класс в C#

namespace A {
    public class B {

        protected class C { }
    }

    public class D {

        void E() {
            var F = new A.B();    // ok!
            var G = new A.B.C();  // error!
        }
    }
}

Нет, модификатора, зависящего от пространства имен, не существует. Один из вариантов - использовать наследование и модификатор «protected», но иметь внутренний конструктор в базовом классе, чтобы внешний код не мог его подклассифицировать. Это может помочь.

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

Rowland Shaw 19.01.2009 15:34

Другие вопросы по теме