С#: Можете ли вы разделить пространство имен на несколько файлов?

Ну, я не смог найти предыдущую публикацию, чтобы ответить на мой вопрос, поэтому....

Я новичок в С# и создаю некоторые 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

Если вы не раскалываете его в разных файлах, вы, вероятно, чересчур прекрасны в своем макете пространства имен.