2013-03-05 6 views
1

만약 내가 다음을 수행한다면, 한 변수에서 다른 변수로 객체를 복사하거나 객체에 대한 포인터가 복사되는 곳을 참조하는 것으로 간주합니까?복사하거나 참조하고 있습니까?

myPanel:Panel; 
myControl:Control; 

myPanel := new Panel; 

myControl := myPanel; 

참조하지 않는 경우 myControl을 사용하여 설정을 변경해도 myPanel 설정이 변경되지 않습니다. 나는 그 말을 바르게 생각합니까?

+0

이 코드가 컴파일됩니까? 나는 그럴 것이라고 생각할 것이다. 당신이하는 일은 두 가지 변수에 동일한 참조를 설정하는 것뿐입니다. 둘 다 동일한 객체를 참조합니다. –

+0

@Ramhound 네, 컴파일됩니다. 따라서 myControl 변수에 적용한 변경 사항도 myPanel 변수에 반영되어야합니다. – ThN

+0

두 변수가 동일한 객체를 가리 킵니다. 동일한 코드 블록에있는 한 두 개를 사용하면 단일 개체가 변경됩니다. 너 왜 이러는거야? –

답변

1

.net에서 대부분의 유형 - 특히 Windows 컨트롤만큼 복잡한 -은 참조 유형입니다. 이것은 변수의 값이 객체에 대한 참조 일 뿐이며, 객체의 변수를 할당 할 때 전체 객체가 아닌 참조를 복사하는 것입니다. 예를 들어, myControl을 변경하면 myPanel이 변경되고 (반대의 경우도 마찬가지 임) 큰 결과는 두 개체가 같은 개체를 참조하기 때문입니다.

설명서를 확인하십시오. 객체 유형이 System.ValueType (또는 ValueType까지 확장되는 System.Enum)을 상속하는 경우 값 유형이며 할당하면 모든 것이 복사됩니다. 그렇지 않으면 참조 유형이고 참조를 복사하는 것입니다.

1

myPanel과 myControl은 모두 참조입니다. 과제를 할 때 참조를 복사하는 것이지 참조를 참조하지는 않습니다. 원하는 경우 메모리에 주소를 복사하는 것으로 생각하십시오.

그러나 myPanel 또는 myControl에서 메서드를 설정하거나 필드를 설정하면 참조 된 객체에 대한 참조가 해제됩니다. myControl을 사용하여이 "설정 변경"(필드 설정을 의미한다고 가정)은 myPanel에서 참조하는 동일한 객체에서 설정을 변경합니다.