【发布时间】:2009-10-05 13:38:29
【问题描述】:
我知道命名空间中可能有很多类。 现在,是否可以在多个程序集(.dll 文件)中拥有一个类?
【问题讨论】:
标签: .net assemblies namespaces
我知道命名空间中可能有很多类。 现在,是否可以在多个程序集(.dll 文件)中拥有一个类?
【问题讨论】:
标签: .net assemblies namespaces
不,您不能将一个类跨越多个程序集。
如果您在assembly1 中创建Namespace1.Class1 和在assembly2 中创建Namespace1.Class1,那么您在项目中引用这两个程序集,您将拥有:
The type 'Namespace1.Class1' exists in both 'assembly1.dll' and 'assembly2.dll' ...
【讨论】:
我认为这是不可能的。最多,您可以在同一个程序集中的多个文件(部分类)中生成一个类定义。
【讨论】:
如果您在两个单独的命名空间中定义两个类,那么您将拥有两个不同的类,它们存在于两个彼此无关的不同命名空间中。对于 CLR,它们看起来像这样:
NamespaceA.ClassA
NamespaceB.ClassA
即使您将它们标记为部分,它们仍然是不同命名空间中的不同类。这是因为在编译类时,命名空间只是简单地添加到类的名称之前。除此之外,CLR 不知道命名空间或部分类的概念。这都是编译器的魔法。
澄清:定义部分类型时,您定义的是类型。类型从不跨程序集或命名空间拆分。
【讨论】:
即使可以,为什么还要这样做?这样做可以解决什么技术或业务问题? .NET 有部分类,如果需要,允许您将一个类分散到多个文件中。您还可以使用扩展方法扩展类的行为,您可以在与您希望扩展的类不同的程序集中定义您的方法。
【讨论】: