Один класс с двумя разными пространствами имен? - PullRequest
4 голосов
/ 13 июля 2010

Возможно ли что-то подобное?

Namespace Transaction, Document

    Class Signer

        Public Sub New()
            'Do Work
        End Sub

    End Class

End Namespace

Я просто хочу иметь возможность создания экземпляра класса Signer из любого пространства имен.Причина в том, что я по ошибке установил его в классе Transaction, и мне нужно перенести его в класс Document без нарушения существующего унаследованного кода.Я бы предпочел, чтобы один и тот же класс Signer не дублировался в обоих пространствах имен, если это возможно.

Ответы [ 3 ]

6 голосов
/ 13 июля 2010

Я не думаю, что вы можете сделать это.Однако вы МОЖЕТЕ определить объект в одном пространстве имен, а затем создать класс с тем же именем в другом пространстве имен, который просто наследует первый класс, например:

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

Namespace Document
    Class Signer
        Inherits Transaction.Signer
    End Class
End Namespace
3 голосов
/ 15 июля 2010

Что вам нужно сделать, это создать класс в отдельных пространствах имен, чтобы у вас фактически были объявлены два разных класса. Пометьте тот, что в пространстве имен 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
2 голосов
/ 13 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...