Я знаю, что в пространстве имен возможно много классов. Теперь, возможно ли иметь класс в нескольких сборках (DLL-файл)?Связь между сборкой и пространством имен в .NET framework?
ответ
Нет, вы не можете пропустить класс над несколькими сборками.
При создании Namespace1.Class1
в assembly1
& Namespace1.Class1
в assembly2
, то вы ссылаетесь как сборки в вашем проекте, вы будете иметь:
- 2 различных классов ошибок
- компиляции (конфликт):
The type 'Namespace1.Class1' exists in both 'assembly1.dll' and 'assembly2.dll' ...
Я думаю, что это невозможно. В лучшем случае вы можете порождать определение класса для нескольких файлов в одной сборке (частичные классы).
Зачем вам это делать, даже если бы вы могли? Какую техническую или деловую проблему можно решить, сделав это? .NET имеет частичные классы, которые позволяют вам распространять класс по нескольким файлам, если это необходимо. Вы также можете расширить поведение классов с помощью методов расширения, где вы можете определить свои методы в отдельной сборке из класса, который вы хотите расширить.
Если вы определяете два класса в двух отдельных пространствах имен, у вас есть два разных класса, существующих в двух разных пространствах имен, которые не имеют ничего общего друг с другом. В CLR, они выглядят следующим образом:
NamespaceA.ClassA
NamespaceB.ClassA
Даже если вы отметите их частичное, они все еще находятся различные классы в отдельных пространствах имен. Это связано с тем, что пространства имен просто добавляются к имени класса при компиляции класса. Помимо этого, CLR не знает понятия пространств имен или частичных классов. Это все магия компилятора.
Разъяснение: При определении частичного типа, вы определяете тип . Тип никогда не, разделенный на сборку или пространство имен.