C #: Можете ли вы разделить пространство имен по нескольким файлам? - PullRequest
13 голосов
/ 22 июня 2010

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

Я новичок в C # и создаю несколько форм Windows Forms и заметил, что он создал и Program.cs, и * 1004.* files.

В обоих случаях он начинается с пространства имен моей программы "Contacts"

namespace Contacts
{
   //code here

Они скомпилированы вместе или они по-прежнему отображаются компилятором отдельно?

Ответы [ 9 ]

14 голосов
/ 22 июня 2010

Да, вы можете. Пространство имен Contacts будет содержать все классы, определенные в файлах, которые определяют это пространство имен.

Вы также можете определять типы, принадлежащие разным пространствам имен в одном и том же файле. Файлы и пространства имен являются полностью ортогональными понятиями.

Вы также можете разделить определение класса на несколько файлов, начиная с C # 2.0. Смотри здесь .

6 голосов
/ 22 июня 2010

Из документации MSDN :

Ключевое слово namespace используется для объявить сферу. Эта область имен пространства позволяет организовать код и дает вам способ создания глобально уникальных типов.

Да, пространства имен могут (и обычно) делятся на несколько файлов кода. Классы в этих пространствах имен компилируются по отдельности, но (как правило, на данный момент без внешних ресурсов) в один выходной файл (то есть exe или dll).

В очень широком смысле, думайте об этом как о сортировке белья. Каждая «куча» (куча цветов, куча белых и т. Д.) Будет пространством имен. Каждый предмет одежды в куче будет классом или интерфейсом.

Надеюсь, это немного поможет ...

6 голосов
/ 22 июня 2010

namespace - это просто префикс имени класса, способ разделения классов. они составляются отдельно.

2 голосов
/ 22 июня 2010

Да, вы можете использовать одно и то же пространство имен в нескольких файлах.

Самый доступный пример: в Visual Studio после создания проекта вы можете создать больше файлов в этом проекте.Для проекта есть настройка для того, какое пространство имен по умолчанию назначать новым файлам.Ваш проект будет скомпилирован как один dll / exe.

Вы также можете использовать существующие пространства имен, такие как System.Ваш класс System будет в вашей сборке.Основные сборки .NET, содержащие системные компоненты, не будут перекомпилированы для включения вашего дополнения.Однако для использования вашего нового класса System.x вам по-прежнему понадобится всего лишь 1 using System утверждение.

Примечание. Я НЕ рекомендую помещать весь ваш код в System, чтобы вы могли избежатьзаявления позже.Есть очень веские причины не делать этого, но для ответа на исходный вопрос это излишне.

2 голосов
/ 22 июня 2010

Нет проблем с разделением пространства имен по нескольким файлам, и в большинстве программ вы будете делать именно это.

Обычно все файлы .cs будут компилироваться вместе с C # компилятором (csc) .

Вы можете увидеть, как ваш код компилируется, изменив этот параметр:

Инструменты | Варианты | Проекты и решения | Построй и беги

Измените раскрывающийся список: «Подробность вывода сборки проекта MSBuild» на одну из более высоких настроек. По умолчанию установлено минимальное значение.

0 голосов
/ 10 августа 2010

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

0 голосов
/ 22 июня 2010

Да, вы можете охватывать файлы и даже сборки пространством имен. Вот еще один трюк:

В Visual Studio, если вы перейдете в Solution Explorer и создадите папку под вашим проектом csharp, это имя папки будет добавлено по умолчанию в пространство имен для любого файла, который вы создаете в папке.

Пример:

  1. Создайте новый проект csharep.
  2. щелкните правой кнопкой мыши по проекту и выберите свойства
  3. Установить пространство имен по умолчанию (в диалоге свойств) на «MyProject»
  4. Ok
  5. Теперь создайте новый класс в вашем проекте.
  6. Обратите внимание, что пространство имен класса - "MyProject"
  7. Теперь щелкните правой кнопкой мыши свой проект и создайте папку с именем "ASubNamespace"
  8. Теперь щелкните правой кнопкой мыши по этой папке и выберите «Добавить | класс
  9. Обратите внимание, что ваш новый класс находится в пространстве имен MyProject.ASubNamespace!
0 голосов
/ 22 июня 2010

Оба скомпилированы в 1 пространство имен, Contacts. Вполне нормально, что у вас есть несколько файлов и одно пространство имен.

Пространство имен - это просто оболочка для ваших классов. Например, теперь вы можете иметь несколько классов с именем Sentence. Вы можете создать предложение в пространстве имен Jail и одно в пространстве имен Linguistics.

Таким образом, у вас будет 2 представления 1 имени класса, Jail.Sentence и Linguistics.Sentence. У обоих тоже разные тела.

Я использую свои пространства имен, чтобы немного «организовать» код. Все мои интерфейсы существуют в Projectname.Contracts, а мой обычный код - в Projectname

Эта страница Википедии также полезна: Вики

0 голосов
/ 22 июня 2010

Короткий ответ - да, вы можете разделить их на отдельные файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...