有两个不同命名空间的一个类?
问题描述:
是这样的可能吗?有两个不同命名空间的一个类?
Namespace Transaction, Document
Class Signer
Public Sub New()
'Do Work
End Sub
End Class
End Namespace
我基本上希望能够从任一命名空间实例化Signer类。原因是我错误地在Transaction类中设置了它,并且需要将它迁移到Document类而不破坏现有的遗留代码。如果可能的话,我宁愿不要在两个名称空间中都有相同的Signer类。
答
我不认为你可以这样做。然而,你可以在一个命名空间中定义的对象,然后做一个类同名的,简单地继承了第一类,像这样其他命名空间:
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
答
一个类只能属于一个命名空间。唯一可以做的其他事情是在另一个名称空间中复制该类。您应该能够重构该代码并更改命名空间,Visual Studio将在整个代码中传播这些更改。
答
您需要做的是在单独的名称空间中创建该类,以便实际声明两个不同的类。将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
我不是名称空间w/r/t VB的专家,但是这似乎真的打败了他们的目的/概念。 – 2010-07-13 17:08:36
使用Visual Studio的重构功能。它支持命名空间的安全重命名 – Andrey 2010-07-13 17:09:11