문제

나는 이것이 왜 이런 일이 일어나고 있는지 이해하지만 완전히 이해하지는 못한다. 나는 a를 가진 기본 클래스가 있습니다 Shared (Static) 변수, 그렇게 선언된다 :

Public Shared myVar As New MyObject(arg1, arg2)

파생 클래스의 방법에서, 나는 다음과 같은 로컬 변수를 설정했습니다.

Dim myLocalVar As MyObject = myVar

이제 내가 같은 일을 할 때 myLocalVar.Property1 += value, 값 Property1 그 방법의 다음 호출에 지속됩니다! 나는 내가 얻는다고 생각한다 그것은 일어나고있을 것입니다. myVar 값 대신 참조로 설정되고 있지만 이전에는 이와 같은 것을 결코 만나지 못했습니다. 어떤 방법이 있습니까 (속성 값을 사용하여 새 개체를 만들기위한 내 해결 방법 외에는 myVar) 만들다 myLocalVar 가치에 따라?

도움이 되었습니까?

해결책

당신이 만들 때 myLocalVar 동일한 공유 객체에 대한 새로운 참조를 작성하고 있습니다. 공유 인스턴스의 로컬 사본을 진정으로 원한다면 실제 사본을 만들어야합니다.

이는 인스턴스를 복제하거나 인스턴스의 사본을 만들 수있는 유형의 사본 생성자와 함께 수행됩니다. 그러나 깊고 얕은 복사와 복제 된 인스턴스의 차이로 인해 액세스하는 속성이 단순히 동일한 인스턴스에 대한 얕은 인스턴스 참조 인 경우 비슷한 문제를 일으킬 수 있기 때문에 이것은 간단하지 않습니다. 원래 인스턴스의 속성은 참조입니다.

이 경우 내가해야 할 가장 좋은 방법은 전체 객체 그래프를 복사하는 대신 필요한 공유 인스턴스의 부분 만 로컬 사본을 만드는 것입니다. 이것은 모든 유형의 로컬 사본을 만드는 것을 의미합니다 Property1 그리고 그것을 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top