С#: Можете ли вы разделить пространство имен на несколько файлов?
Ну, я не смог найти предыдущую публикацию, чтобы ответить на мой вопрос, поэтому....
Я новичок в С# и создаю некоторые Windows Forms и заметил, что он создал файлы Program.cs
и Form1.cs
.
В обоих случаях он начинается с пространства имен моей программы "Контакты"
namespace Contacts
{
//code here
Скомпилированы ли они вместе или они все еще рассматриваются отдельно компилятором?
Ответы
Ответ 1
Да, вы можете. Пространство имен контактов будет содержать все классы, определенные в файлах, которые определяют это пространство имен.
Вы также можете определить типы, принадлежащие разным пространствам имен в одном файле. Файлы и пространства имен являются полностью ортогональными понятиями.
Вы также можете разделить определение класса на несколько файлов, начиная с С# 2.0. См. здесь.
Ответ 2
namespace - это просто префикс имени класса, способ разделения классов. они компилируются отдельно.
Ответ 3
Из Документация MSDN:
Ключевое слово namespace используется для объявить область. Эта область пространства имен позволяет организовать код и дает вам способ создания уникальных в глобальном масштабе типов.
Да, пространства имен могут (и обычно) разбиваться на несколько файлов кода. Классы в этих пространствах имен компилируются отдельно, но (как правило, оставляют внешние ресурсы на данный момент) в один выходной файл (т.е. Exe или dll).
В очень широком смысле, подумайте, как сортировать белье. Каждая "куча" (куча цветов, куча белых и т.д.) Будет пространством имен. Каждый кусок одежды в куче будет классом или интерфейсом.
Надеюсь, что это поможет немного...
Ответ 4
Да, вы можете использовать одно и то же пространство имен в нескольких файлах.
Самый доступный пример: в Visual Studio, после создания вашего проекта, вы можете создать больше файлов в этом проекте. Существует параметр для проекта, для которого пространство имен по умолчанию назначается новым файлам. Ваш проект будет скомпилирован как единый dll/exe.
Вы также можете использовать существующие пространства имен, такие как System
. Класс вашей системы будет в вашей сборке. Основные сборки .NET, содержащие системный материал, не будут перекомпилированы для включения вашего дополнения. Однако вам все равно потребуется только 1 using System
в верхней части классов, чтобы использовать ваш новый класс System.x.
Примечание. Я НЕ сторонник размещения всего вашего кода в Системе, поэтому вы можете избежать использования утверждений позже. Есть очень веские причины, чтобы не делать этого, но он переборщил для ответа на исходный вопрос.
Ответ 5
Нет проблем с разделением пространства имен на несколько файлов, и в большинстве программ вы будете делать именно это.
Обычно все файлы .cs будут скомпилированы вместе с компилятор С# (csc).
Вы можете увидеть, как скомпилирован ваш код, изменив этот параметр:
Инструменты | Варианты | Проекты и решения | Построить и запустить
Измените выпадающий список: "MSBuild project build output verbosity" на одну из более высоких настроек. По умолчанию он установлен как минимум.
Ответ 6
Короткий ответ - да, вы можете разделить их на отдельные файлы.
Ответ 7
Оба скомпилированы в 1 пространство имен, Contacts
. Это довольно нормально, у вас есть несколько файлов и одно пространство имен.
Пространство имен - это всего лишь оболочка вокруг ваших классов. Например, теперь вы можете иметь несколько классов с именем Sentence
.
Вы можете создать предложение в пространстве имен Jail
и одно в пространстве имен Linguistics
.
Таким образом, у вас будет 2 представления 1 имени класса, Jail.Sentence
и Linguistics.Sentence
. У обоих тоже есть другое тело.
Я использую свои пространства имен для "упорядочения" кода. Все мои интерфейсы существуют в Projectname.Contracts
, а мой обычный код в Projectname
Эта страница Википедии полезна также: Wiki
Ответ 8
Да, вы можете охватывать файлы и даже сборки с пространством имен. Вот еще один трюк:
В Visual Studio, если вы перейдете в Solution Explorer и создадите папку под проектом csharp, это имя папки будет добавлено по умолчанию к пространству имен для любого файла, который вы создаете в папке.
Пример:
- Создайте новый проект csharep.
- щелкните правой кнопкой мыши проект и выберите свойства
- Задайте пространство имен по умолчанию (в диалоговом окне свойств) на "MyProject"
- Ok
- Теперь создайте новый класс в своем проекте.
- Обратите внимание, что пространство имен классов является "MyProject"
- Теперь щелкните правой кнопкой мыши ваш проект и создайте папку с именем "ASubNamespace"
- Теперь щелкните правой кнопкой мыши эту папку и выберите add | класс
- Обратите внимание, что ваш новый класс находится в пространстве имен MyProject.ASubNamespace!
Ответ 9
Если вы не раскалываете его в разных файлах, вы, вероятно, чересчур прекрасны в своем макете пространства имен.