【问题标题】:Relationship between Assembly and Namespace in .NET framework?.NET 框架中程序集和命名空间之间的关系?
【发布时间】:2009-10-05 13:38:29
【问题描述】:

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

【问题讨论】:

    标签: .net assemblies namespaces


    【解决方案1】:

    不,您不能将一个类跨越多个程序集。
    如果您在assembly1 中创建Namespace1.Class1 和在assembly2 中创建Namespace1.Class1,那么您在项目中引用这两个程序集,您将拥有:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果您在两个单独的命名空间中定义两个类,那么您将拥有两个不同的类,它们存在于两个彼此无关的不同命名空间中。对于 CLR,它们看起来像这样:

        NamespaceA.ClassA
        NamespaceB.ClassA
        

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2013-12-04
            • 1970-01-01
            • 2010-09-23
            • 1970-01-01
            • 2023-04-02
            • 2010-09-23
            • 1970-01-01
            • 2010-10-14
            • 2020-12-16
            相关资源
            最近更新 更多