Vb.net 一个类有两个不同的名称空间?

Vb.net 一个类有两个不同的名称空间?,vb.net,namespaces,Vb.net,Namespaces,这样的事情可能吗 Namespace Transaction, Document Class Signer Public Sub New() 'Do Work End Sub End Class End Namespace 我基本上希望能够从任一名称空间实例化Signer类。原因是我在事务类中错误地设置了它,需要在不破坏现有遗留代码的情况下将其迁移到文档类。如果可能的话,我不希望在两个名称空间中复制相同的签名者类。

这样的事情可能吗

Namespace Transaction, Document

    Class Signer

        Public Sub New()
            'Do Work
        End Sub

    End Class

End Namespace

我基本上希望能够从任一名称空间实例化Signer类。原因是我在事务类中错误地设置了它,需要在不破坏现有遗留代码的情况下将其迁移到文档类。如果可能的话,我不希望在两个名称空间中复制相同的签名者类。

我认为您无法做到这一点。但是,您可以在一个命名空间中定义对象,然后在另一个命名空间中创建一个名称相同的类,该类只继承第一个类,如下所示:

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

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

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

您需要做的是在单独的名称空间中创建类,以便实际声明两个不同的类。将
事务
命名空间中的一个标记为已过时,并将其用作实际类的代理,这样就不会复制实现

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
名称空间事务
_
公共类签名者
作为文档签名者的私有m_实现
公共分新()
m_实现=新文档。签名者()
终点
公共子剂量测量法()
m_Implementation.DoSomething()
端接头
末级
结束命名空间
名称空间文档
公共类签名者
公共分新()
终点
公共子剂量测量法()
端接头
末级
结束命名空间

我不擅长使用VB/r/t名称空间,但这似乎真的违背了它们的目的/概念。请使用Visual Studio的重构功能。它支持名称空间的安全重命名。这就像一个符咒。我还使用了@Brian Gideon的建议,将过时的设置为+1。