2013-05-24 1 views
2

정적 구성원은 인스턴스가 아니라 유형 자체와 관련됩니다.정적 멤버가 인스턴스 클래스가 GC되지 않도록합니까?

하지만 궁금 해서요 :

나는이 수업이있는 경우 : 나는 물론 new A()

으로 만들 수 있습니다

public class A 
{ 
... 
public static int MyInt{get;set;} 
... 
} 

을하지만 내 질문은 :

  • 가합니까 유형 자체에 "고정"된 정적 멤버는 인스턴스 fr을 방지합니다. GC'ed되고 옴?

답변

10

반드시 그렇지는 않습니다. 정적 멤버는 CLR이 Type 개체로 유지하는 클래스 자체에 속합니다. 정적 멤버가 A 유형의 개체 인 경우 정적 멤버는 특정 인스턴스 A을 가비지 수집 할 수 있습니다.

public class Example 
{ 
    // this particular instance of Example will not be collected 
    private static readonly Example Default = new Example(); 

    public void Foo() 
    { 
     // this instance *can* be collected after Foo returns 
     Example anotherInstance = new Example(); 
    } 
} 

이 문제는 반드시 싱글 아니지만 무국적 인 "기본"동작을 할 특정 클래스에 유용합니다. 내가 이것을 사용하는 한 가지 예가 ANTLR 4 프로젝트의 C# 런타임 라이브러리에있는 ParseTreeWalker.Default 필드입니다. 기본 동작이 필요한 경우 새 객체를 만들지 않고 해당 인스턴스를 사용할 수 있지만 직접 동작을 추가하려면 ParseTreeWalker까지 확장되는 클래스의 인스턴스를 직접 만들 수도 있습니다.

2

아니요. 이것은 파이널 라이저를 덮어 쓰면 쉽게 볼 수 있습니다.

+0

테스트 케이스 제안을 위해 투표했습니다. 코드 예제를 사용할 수 있습니다. – Gusdor

관련 문제