.NET框架中Assembly和Namespace之间的关系?

时间:2009-10-05 13:38:30

标签: .net assemblies namespaces

我知道在命名空间中可以有很多类。 现在,是否可以在多个程序集(.dll文件)中创建一个类?

4 个答案:

答案 0 :(得分:4)

不,你不能跨越多个集会的班级 如果您在Namespace1.Class1&中创建assembly1 Namespace1.Class1中的assembly2,然后您引用项目中的两个程序集,您将拥有:

  • 2个不同的班级
  • 编译错误(冲突):The type 'Namespace1.Class1' exists in both 'assembly1.dll' and 'assembly2.dll' ...

答案 1 :(得分:1)

我认为这是不可能的。最多,您可以在同一程序集(部分类)中的多个文件中生成类定义。

答案 2 :(得分:1)

如果在两个单独的命名空间中定义两个类,则有两个不同的类,它们存在于两个不同的命名空间中,它们彼此之间没有任何关系。对于CLR,它们看起来像这样:

NamespaceA.ClassA
NamespaceB.ClassA

即使您将它们标记为部分,它们仍然是不同命名空间中的不同类。这是因为在编译类时,名称空间只是前缀为类的名称。除此之外,CLR不知道命名空间部分类的概念。这都是编译魔术。

澄清:定义部分类型时,您正在定义类型。类型从不拆分在程序集或命名空间中。

答案 3 :(得分:0)

即使可以,你为什么要这样做呢?这样做会解决哪些技术或业务问题? .NET具有部分类,允许您在需要时将类扩展到多个文件。您还可以使用扩展方法扩展类的行为,您可以在与要扩展的类不同的程序集中定义方法。