2014-10-29 3 views
0

나는 Font 클래스는 IDisposable 인터페이스를 구현하고 명시 적으로 배치 또는 I가 글꼴 속성이 원하시는 곳은 클래스가 using클래스의 일회용 속성을 언제 어디서 인스턴스화하고 처리 할 수 ​​있습니까?

를 사용한다 알고 그것을

class Test 
{ 
    Font Font {set; get;} 
    public Test() 
    { 
     Font = new Font("Arial", 16, FontStyle.Bold);     
    } 
} 

나는 그것을 폐기와 걱정 클래스의 객체가 삭제 될 때 언제 어디에서 인스턴스화하고 처리해야합니까?

답변

1

그것은 일반적으로 권장되는 패턴이 IDisposable 직접 구현하는 것입니다 당신이 어떻게 든 당신의 테스트 클래스의 모든 멤버 함수에 연산자를 '사용'을 사용하려는 경우, 정말 적용되지이다 폐기해야 객체 :

:

class Test : IDisposable 
{ 
    public Font Font { get; set; } 

    public Test() 
    { 
     Font = new Font("Arial", 16, FontStyle.Bold);     
    } 

    public void Dispose() 
    { 
     Dispose(true); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      Font.Dispose(); 
     } 
    } 
} 

그런 식으로, 당신은 클래스 내부의 Font 클래스를 사용하고 Test 클래스를 사용하여 완료 경우에만 처분 할 수있는

using (Test test = new Test()) 
{ 
    // Do stuff with test. 
} 
+0

고맙습니다. 그런 다음 클래스의 외부에서 다른 글꼴을 인스턴스화하려면 "new Font (...)"문을 사용할 필요가 없지만 클래스에는 맞습니까? – Ahmad

+0

위의 글꼴 예제와 같이 전역 클래스 멤버의 경우이 스타일을 무시하면 어떻게됩니까? – Ahmad

+0

'Font' 리소스를 정리하기 위해 파이널 라이저에 맡길 것입니다. –

-1
class Test 
{ 
    Font Font {set; get;} 
    public Test() 
    { 
     using (var font = new Font("Arial", 16, FontStyle.Bold)) 
     { 
      // do something with font here 
     } // font is automatically disposed when going out of scope 

    } 
} 

전체 사용 문은 개체를 명시 적으로 처리 할 필요없이 로컬에서 처리하는 데 사용됩니다. 를 캡슐화 할 때

따라서

+0

이 점을 놓치십시오. 그는 일단 생성자가 끝나면 폐기 될 것이기 때문에'Font' 속성을 사용할 수 없을 것입니다. –

+0

예, 당연히, 내가 처음에 아무것도 지정하지 않았으므로 :) 원래의 전체 질문은 공식화 된 방식으로 포인트가 누락되었습니다. –

+0

질문의 요점은 전체 IDisposable 속성을 사용하는 방법입니다. – Ahmad

관련 문제