2010-06-22 3 views
10

Ну я не мог найти какую-либо предыдущую проводку, чтобы ответить на мой вопрос так ....C#: Можете ли вы разделить пространство имен на несколько файлов?

Я новичок в C# и создание некоторого Windows Forms и заметил, что он создал как Program.cs и Form1.cs файлов.

В обеих начинается с именами моей программы «Контакты»

namespace Contacts 
{ 
    //code here 

Является ли эти составлены вместе, или они все еще рассматриваются отдельно компилятор?

ответ

11

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

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

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

+0

WTF!Мне сказали, что 'C#' не имеет множественного наследования, потому что это «источник проблем», и вы можете объявлять одно и то же пространство имен во многих файлах, C# «смешивать» их в одно и то же ... ** и ** вы может также разбивать определение класса на несколько файлов? Шутки в сторону? –

+0

Пространства имен предназначены для размещения типов, и поскольку типы часто определяются в разных файлах, разделение пространств имен между файлами довольно очевидно. Многие основные языки делают то же самое. Что касается классов, то аргумент более тонкий. Разделение их может помочь организовать код в случаях, когда вы вынуждены помещать большое количество членов в один класс, например. для доступа к данным или интеграции. Он также может помочь с контролем источника. В конечном счете вам решать, что ситуация не запуталась. В случае множественного наследования все становится беспорядочным с точки зрения того, как вы создаете свою рабочую среду, то есть – Mau

+0

«В конечном счете вам решать, что ситуация не становится беспорядочной». Это предложение, которое показывает, что вы умный и хороший разработчик. И это предложение показывает, что независимо от того, что это за язык, он всегда заканчивается «разработчиком, чтобы контролировать ситуацию». Я имею в виду, что говоря, что C# не имеет множественного наследования, потому что это «источник проблем», не имеет смысла. C# - очень хороший язык, и он должен ** иметь возможности наследования. «Источником проблемы» никогда не является язык, это касается разработчиков IMHO (поэтому мы используем интерфейс в качестве обходного пути). –

6

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

1

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

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

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

Инструменты | Варианты | Проекты и решения | Сборка и запуск

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

0

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

5

Из MSDN Documentation:

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

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

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

Надежда, что помогает немного ...

+2

Лучшая версия аналогии: сами свайные файлы - это файлы, но у вас может быть несколько кучек белых, несколько кучек цветов и т. Д., И каждый из них сгруппирован вместе с похожими типами свай. ... Хотя я забыл, что для C# требуется один класс для каждого файла, например, Java. – JAB

+0

Вы можете поместить несколько классов в один файл (хотя это затрудняет обслуживание, если вы ищете класс в файле, который не назван в честь этого класса). Вы также можете разделить один и тот же класс на несколько файлов с помощью частичных классов (это то, что делается по умолчанию, например, для оконных классов WPF, скрывая код клонирования инициализации GUI). –

2

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

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

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

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

0

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

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

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

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

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

0

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

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

Пример:

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

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

Смежные вопросы