2009-11-18 3 views
1

코드에서 객체를"복제 중 "입니다. 예를 들어 :VB.NET 1.1의 할당 = "연산자

objClone = objOriginal 

내 질문은 :

  1. 은 VB.NET 1.1 할당 연산자가 objClone에 objOriginal의 멤버 별 회원 사본을 하는가 또는 objClone는 단순히 참고로 지적 않는다 objOriginal에 의해 참조되는 메모리에?

답변

5

유형이 참조 유형 (예 : 클래스) 인 경우 참조 사본입니다. 값 유형 (구조) 인 경우 구성원 복사로 멤버를 수행합니다. 당신이 objOriginal가 무엇인지 유형에 따라 다릅니다 보여 코드를 어떻게됩니까

+0

그게 내가 생각한거야. – Achilles

+0

FYI - 이것은 VB.NET의 최신 버전과 C# 및 기타 .NET 언어에서 동일합니다. –

0

VB는 확실하지 않지만 C# 버전의 할당은 얕은 복사본 만 수행합니다. (편집 : 참조 유형의 경우)

3

:

  • 가 참조 형식 인 경우, objCloneobjOriginal
  • 가 값 형식 인 경우와 동일한 인스턴스를 참조합니다, 그것은 어떤 멤버가 참조 형식 인, 해당 멤버는 줘야 갖는 값 유형 인 경우 objClone

참고 비록 objOriginal 동일한 내용으로, 새로운 인스턴스 것 l 원래 개체와 동일한 인스턴스를 참조합니다 (얕은 복사본).

예 :이 경우

Public Class Test 
    Public Number As Integer 
End Class 

Dim objOriginal As New Test() 
objOriginal.Number = 42 
Dim objClone As Test 
objClone = objOriginal 

objCloneobjOriginal 둘다 Test의 동일한 인스턴스를 참조한다. 이 경우

Public Structure Test 
    Public Number As Integer 
End Class 

Dim objOriginal As New Test() 
objOriginal.Number = 42 
Dim objClone As Test 
objClone = objOriginal 

, objCloneobjOriginalNumber 분야에서 자신의 Integer 인스턴스 Test, 각각의 서로 다른 인스턴스 될 것입니다. 이 경우
Public Class SomeValue 
    Public Number As Integer 
End Class 
Public Structure Test 
    Public Value As SomeValue 
End Class 

Dim objOriginal As New Test() 
objOriginal.Value = New SomeValue() 
objOriginal.Value.Number = 42 
Dim objClone As Test 
objClone = objOriginal 

, objClone objOriginal 및 K는 두 개의 서로 다른 인스턴스 수 있지만 둘 가치 부재 통해 SomeValue의 동일한 인스턴스를 참조한다.

+0

와우! 그건 디버그에 지저분한 문제입니다. – Achilles