2010-07-13 5 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, но это, по-видимому, действительно разрушает их цель/концепцию. –

+0

использовать возможности рефакторинга Visual Studio. он поддерживает безопасное переименование пространств имен – Andrey

ответ

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

2

Класс может принадлежать только одному пространству имен. Единственное, что вы можете сделать, это дублировать этот класс в другом пространстве имен. Вы должны иметь возможность реорганизовать этот код и изменить пространство имен, визуальная студия будет пропагандировать эти изменения во всем коде.

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 
Смежные вопросы