一个类有两个不同的命名空间?

时间:2010-07-13 17:03:57

标签: vb.net namespaces

这样的事情可能吗?

Namespace Transaction, Document

    Class Signer

        Public Sub New()
            'Do Work
        End Sub

    End Class

End Namespace

我基本上希望能够从任一命名空间实例化Signer类。原因是我错误地将它设置在Transaction类中,需要将其迁移到Document类,而不会破坏现有的遗留代码。如果可能的话,我宁愿在两个命名空间中没有相同的Signer类。

3 个答案:

答案 0 :(得分:6)

我认为你不能那样做。但是,您可以在一个名称空间中定义对象,然后在另一个名称空间中创建一个同名的类,它只是继承第一个类,如下所示:

Namespace Transaction
    Class Signer
        ' Signer class implementation
    End Class
End Namespace

Namespace Document
    Class Signer
        Inherits Transaction.Signer
    End Class
End Namespace

答案 1 :(得分:3)

您需要做的是在单独的命名空间中创建类,以便实际上声明了两个不同的类。将Transaction命名空间中的那个标记为过时,并将其作为实际类的代理,以便您不重复实现。

Namespace Transaction

  <Obsolete> _
  Public Class Signer

    Private m_Implementation As Document.Signer

    Public Sub New()
      m_Implementation = new Document.Signer()
    End

    Public Sub DoSomething()
      m_Implementation.DoSomething()
    End Sub

  End Class

End Namespace

Namespace Document

  Public Class Signer

    Public Sub New()

    End

   Public Sub DoSomething()

   End Sub

  End Class

End Namespace

答案 2 :(得分:2)

一个类只能属于一个名称空间。您可以做的唯一其他事情是在另一个命名空间中复制该类。您应该能够重构该代码并更改命名空间,visual studio将在整个代码中传播这些更改。