Отношения между сборкой и пространством имен в .NET Framework? - PullRequest
0 голосов
/ 05 октября 2009

Я знаю, что можно иметь много классов в пространстве имен. Теперь возможно ли иметь класс в нескольких сборках (файл .dll)?

Ответы [ 4 ]

4 голосов
/ 05 октября 2009

Нет, нельзя распределить класс по нескольким сборкам.
Если вы создадите Namespace1.Class1 в assembly1 & Namespace1.Class1 в assembly2, то вы будете ссылаться на обе сборки в своем проекте, и у вас будет:

  • 2 разных класса
  • ошибка компиляции (конфликт): The type 'Namespace1.Class1' exists in both 'assembly1.dll' and 'assembly2.dll' ...
1 голос
/ 05 октября 2009

Если вы определяете два класса в двух отдельных пространствах имен, у вас есть два разных класса, существующих в двух разных пространствах имен, которые не имеют ничего общего друг с другом. Для CLR они выглядят так:

NamespaceA.ClassA
NamespaceB.ClassA

Даже если вы отметите их как частичные, они все равно будут отдельными классами в отдельных пространствах имен. Это связано с тем, что пространства имен просто добавляются к имени класса при его компиляции. Кроме того, CLR не знает о понятии пространств имен или частичных классов. Это все волшебство компилятора.

Уточнение : При определении типа частичный вы определяете тип . Тип никогда не разделяется на сборку или пространство имен.

1 голос
/ 05 октября 2009

Я думаю, что это невозможно. Самое большее, вы можете создать определение класса для нескольких файлов в одной сборке (частичные классы).

0 голосов
/ 05 октября 2009

Зачем вам это делать, даже если бы вы могли? Какую техническую или бизнес-проблему можно решить с помощью этого? .NET имеет частичные классы, которые позволяют вам распределять класс по нескольким файлам, если это необходимо. Вы также можете расширить поведение классов, используя методы расширения, где вы можете определить свои методы в отдельной сборке от класса, который вы хотите расширить.

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