2010-03-17 5 views
1

작성하기 전에 GDI + 오브젝트를 삭제해야합니까?작성하기 전에 GDI + 오브젝트를 처리해야합니까?

GDI + 개체를 사용한 후에 항상 Dispose하는 것이 좋습니다.

Pen p = new Pen(Color.Green); 
// use green 'p' 

p = new Pen(Color.Red); // Should I Dispose my 'p' first? 
// use red 'p' 

p.Dispose(); 

편집 A : :이 상황이있는 경우

Pen p = new Pen(Color.Green); 
// use 'p' 
p.Dispose(); 

지금, '사용'사용

를마다 할 수 없습니다.

private Pen p; 

public RefreshPen(style) 
{ 
    // p.Dispose(); +- 
    p = new Pen(style.Color); 
    // etc. 
} 

편집 B :

것은이 확인 될 것인가?

using (Pen p = new Pen(Color.Green)) 
{ 
    // use green 'p' 

    p = new Pen(Color.Red); // Should I Dispose my 'p' first? 
    // use red 'p' 

    p = new Pen(Color.Blue); // Should I Dispose my 'p' first? 
    // use blue 'p' 
} 

답변

3

예. 그렇습니다. (또한 나는 매우는 거의 명시 적으로 .Dispose를 호출하지 않습니다. using 문이 엄청난 도움이 여기에 있습니다. using가 처리한다.)

+0

아마도 편집을 참조하십시오. 그런데 '사용하기'는 (녹색/적색) 예제와 같이 여러 개의 연속 된 오브젝트 작성에서도 처분하는 데 도움이 될 것이라고 말하는가? – serhio

+0

+1. "RefreshPen"메서드가 없기 때문에 "using"문을 사용하기가 어렵습니다. – David

+0

@David : 사용자 정의 컨트롤이 있고 스타일을 조건부로 변경해야하는 펜으로 그리 (페인트)하면 어떻습니까? – serhio

1

예. 새 오브젝트를 작성하여 p에 지정하면 이전 오브젝트를 처리해야합니다.

그래서처럼 코딩 할 수 있습니다

using(Pen p = new Pen(Color.Green)) 
{ 
    //do some stuff 
} 

using(Pen q = new Pen(Color.Red)) 
{ 
    //do some other stuff 
} 

이 펜을 처분 잊고, 또는 삭제 된 객체를 사용하지 못하도록합니다.

+0

어쩌면 내 편집을 참조하십시오. – serhio

+0

@serhio - 아마도 ... 예. 동일한 변수 'p'에 할당하더라도 ... 완전히 새로운 * 객체입니다. 이전 펜은 새로운 Pen 문을 수행하기 전에 제대로 폐기되어야합니다. 그렇게하면 이전 펜에 대한 참조가 손실되고 다시 Dispose를 호출 할 수 없기 때문입니다. – Nick

+0

@Nick - "maybe"는 'using'을 사용하기위한 것이고, 그것은 개인 변수와 결합 될 수 없습니다. – serhio

1

개체의 속성을 변경할 수 없습니까?

Pen p = new Pen(Color.Green); 
//use it here. 
p.Color = Color.Red; 
//use it some more. 
p.Dispose(); 
+0

예. 당신은 이유가 있습니다, 마침내 저는이 "전략"을 채택했습니다. 내가 질문을 공식화 한 것처럼 이것은 대답이 아닙니다 :) – serhio

관련 문제