2010-07-13 78 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 
相關問題