【问题标题】:One Class with two different Namespaces?一个类有两个不同的命名空间?
【发布时间】:2011-03-15 10:47:27
【问题描述】:

这样的事情可能吗?

Namespace Transaction, Document

    Class Signer

        Public Sub New()
            'Do Work
        End Sub

    End Class

End Namespace

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

【问题讨论】:

  • 我不是 w/r/t VB 命名空间方面的专家,但这似乎真的违背了它们的目的/概念。
  • 使用 Visual Studio 的重构功能。它支持命名空间的安全重命名

标签: vb.net namespaces


【解决方案1】:

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

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

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

【讨论】:

  • 这就像一个魅力。为此,我还使用了@Brian Gideon 关于 +1 已过时的建议。
【解决方案2】:

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

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-14
      • 2014-01-12
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2011-05-29
      • 2020-07-13
      • 2019-03-01
      相关资源
      最近更新 更多