C# specification에서 우리는 참조 읽기/쓰기가 원 자성임을 알고 있습니다. 객체의 멤버에 액세스하는 명령문에서 참조에도 원자 적으로 액세스 할 수 있습니까? 필자는 컴파일러가 코드를 생성하는 동안 원 자성을 제공해야하는 암시 적 참조 읽기 종류이기 때문에 예라고 생각합니다.개체 구성원 및 원 자성에 액세스
같은 성명에서 멤버에 액세스하기 위해 개체에 액세스하면 이로 인해 개체 참조가 유지되므로 다른 스레드에서 새 인스턴스를 만들 때 가비지 수집되지 않습니다?
그래서 체인의 멤버에 액세스하면 가장 왼쪽의 객체 참조도 유지되어 다른 스레드에서 가비지 수집되지 않습니까?
다음 코드를 고려하십시오.
static SomeClass sharedVar;
void someMethod()
{
SomeClass someLocalVar = sharedVar.memberX.memberY.a;
operations on someLocalVar...
}
내가 MSDN library에서, 주제에 대한 공식 설명을 찾고, C#을 사양 등 또는 Microsoft 사람들은 뭔가를 파괴하지하고 모든 것이 잘되어 있는지 확인합니다.
2. 다른 스레드가 sharedVar에 새 인스턴스를 할당하면이 참조가 sharedVar에 액세스하는 동안 폐기 된 이전 참조가 발생합니다. 3. 스레드가 명령문에 대한 명령어를 실행하는 동안 어떤 점을 말합니다. SomeClass someLocalVar = sharedVar.memberX.memberY.a; memberY를 읽으면 다른 스레드가 실행되어 null 또는 새 개체를 sharedVar에 할당합니다. 나는 그 참고 문헌이 삭제 될 것이라고 생각하지 않지만 나는 단지 주저하고 공식적인 문서, 설명으로 확실하게하고 싶습니까? 감사합니다. – lockedscope