2010-07-13 4 views
4

가능한가요?두 개의 다른 네임 스페이스가있는 하나의 클래스?

Namespace Transaction, Document 

    Class Signer 

     Public Sub New() 
      'Do Work 
     End Sub 

    End Class 

End Namespace 

기본적으로 네임 스페이스에서 Signer 클래스를 인스턴스화 할 수 있기를 원합니다. 그 이유는 내가 실수로 그것을 트랜잭션 클래스에서 설정하고 기존 레거시 코드를 손상시키지 않고 Document 클래스로 마이그레이션해야하기 때문입니다. 가능하다면 두 네임 스페이스 모두에서 동일한 서명자 클래스가 중복되지 않도록하는 것이 좋습니다.

+0

저는 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

. 네가 할 수있는 유일한 또 다른 일은 다른 네임 스페이스에서 그 클래스를 복제하는 것이다. 해당 코드를 리팩토링하고 네임 스페이스를 변경할 수 있어야합니다. 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 
관련 문제