Это вопрос к философам .NET:
Насколько я понимаю, Microsoft сознательно отрицает использование частных классов в C #. Почему они это сделали и каковы их аргументы для этого?
Я, например, создаю большое приложение, которое включает в себя инструмент отчетности. Этот инструмент использует множество бизнес-объектов, которые используются только в инструменте отчетности, а не в других частях проекта. Я хочу инкапсулировать их для использования только в самом инструменте отчетности.
Отличное решение - создать отдельный проект в VS для этого инструмента, и я сделаю так, но мне интересно, что если я не смогу сделать это - например, наша архитектура была недостаточно хороша, и у нас есть большой отдельный проект.
За «закрытым классом» я имею в виду класс, который нельзя использовать ни в каком другом пространстве имен, кроме его собственного.
My Вопрос не был - как мне это смоделировать или сделать по-другому. Мне просто интересно, почему бы не использовать личное ключевое слово с ключевым словом класса без каких-либо родительских классов. Я думаю, что должна быть какая-то причина, и я хочу это знать
Полагаю, вы хотите сделать это
namespace Baz
{
private class foo
{
private int _bar;
}
}
Если да. Тогда с какой целью foo будет server. В пространстве имен вы можете быть более строгими, чем внутренние, и использовать класс. Если бы я мог это сделать, где бы я это использовал.
Вот почему у вас есть эта проверка времени компиляции.
Теперь внутри общедоступного класса имеет смысл иметь приватный класс. Я не могу лучше объяснить это Внутренние классы в C# — почему они не используются чаще? .
Вы можете создать закрытый класс как член другого типа:
public class Outer {
// ...
private class Inner {
// ...
}
}
и Внутренний
виден только членам Внешнего
.
На самом внешнем уровне (т.е. в пространстве имен) private
в соответствии с его определением не имеет смысла (поскольку нет ничего, что могло бы быть приватным). Вместо этого используйте internal
(видимый только для членов содержащей сборки).
Вы можете определить частный класс, но он может использоваться только содержащим его классом.
Если вам нужен класс, который виден только внутри определенной сборки (DLL/EXE/и т. д.), вам следует объявить его как внутренний
(Друг
в VB)
Верно, но вы можете довольно точно смоделировать это с помощью внутренних классов и internalsvisibletoAttribute, если пространство имен разделено на несколько сборок.
Также помните, что класс внутри другого может быть закрытым для внешнего класса. Для этой цели внешний класс можно рассматривать как пространство имен.
Разрешение классам быть закрытыми для пространства имен не обеспечит значимого уровня защиты.
Любая сборка в мире может просто сослаться на вашу dll и начать писать код в вашем пространстве имен, который обращается к вашим якобы закрытым классам.
Я думаю, что это, возможно, ответ, который вы получите от Microsoft.