2010-07-13 76 views
4

是这样的可能吗?有两个不同命名空间的一个类?

Namespace Transaction, Document 

    Class Signer 

     Public Sub New() 
      'Do Work 
     End Sub 

    End Class 

End Namespace 

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

+0

我不是名称空间w/r/t VB的专家,但是这似乎真的打败了他们的目的/概念。 – 2010-07-13 17:08:36

+0

使用Visual Studio的重构功能。它支持命名空间的安全重命名 – Andrey 2010-07-13 17:09:11

回答

6

我不认为你可以这样做。然而,你可以在一个命名空间中定义的对象,然后做一个类同名的,简单地继承了第一类,像这样其他命名空间:

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

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

这工作就像一个魅力。我还使用@Brian Gideon关于过时+1的建议。 – EdenMachine 2010-07-15 13:54:37

2

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

2

您需要做的是在单独的名称空间中创建该类,以便实际声明两个不同的类。将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 
相关问题