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





Вы по-прежнему можете использовать ключевое слово internal и предоставлять внутренние классы другой сборке через атрибут Внутреннее устройство в файле AssemblyInfo.cs.
Это правда. Но что я знаю, это невозможно сделать на уровне пространства имен?
Это невозможно с 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», но иметь внутренний конструктор в базовом классе, чтобы внешний код не мог его подклассифицировать. Это может помочь.
... в конце концов, если бы был способ ограничить пространство имен, люди все равно могли бы определять то же пространство имен в своем коде и наследовать таким образом ...
За исключением того, что [InternalsVisibleTo] все еще находится на уровне сборки, а не на уровне пространства имен.