2012-04-23 2 views
1

using() 문에서 저장소 클래스를 호출하는 메서드를 만들려고합니다. 그 클래스는 현재 일회용이 아닙니다. IDisposable을 구현하기 전에 고려해야 할 것이 있습니까? 이 클래스는 IDisposable을 구현해야한다는 것을 의미하지 않는 클래스 내부 IDisposable 객체를 사용해서 즉IDisposable을 구현할 때 고려해야 할 위험이 있습니까?

using(var repo = new RespositoryClass()) 
{ 
    //do work 
} 
+2

왜 IDisposable을 구현해야합니까? 그것이 일회용 리소스를 사용한다고해서 반드시 IDisposable을 구현해야한다는 의미는 아닙니다. – Servy

+0

@Servy : 답변으로 게시하십시오. 그것은 올바른 것입니다! –

+0

질문이 꽤 넓게 보입니다. 나는 당신이 염려하는 것을 모르는 특정한 원인을 생각할 수는 없지만, 여기에 당신의 개발에 올바른 빛을 줄 수있는 좋은 기사가 있습니다. http://www.codeproject.com/Articles/29534/IDisposable-What-Your-Mother-Never-Told-You-About – MilkyWayJoe

답변

3

클래스가 관리되지 않는 리소스를 사용하거나이를 구현하는 다른 멤버를 초기화하는 경우 IDisposable을 구현해야합니다. 그렇지 않으면 필요하지 않은 경우에는 사용하지 마십시오.

+0

내 생각은 정확히 – Ropstah

+1

*는 IDisposable을 구현하는 다른 회원/소유하고 있습니다. 다른 것에 대한 책임이 있거나 사용하는 경우 참조를 보유한 객체를 삭제하고 싶지는 않습니다. – roken

+0

@roken : 좋은 지적입니다. 그에 따라 내 대답이 수정되었습니다. –

2

.

아래 예제 클래스는 IDisposable을 구현할 필요가 없습니다. 여기

class NotDisposable 
{ 
    public void someMethod() 
    { 
    using(SomethingDisposable resource = new SomethingDisposable()) 
    {...} 
    } 
} 

필요가 IDisposable을 구현하는 것이라고 클래스의 예입니다. 이 두 번째 예에서 볼 수 있듯이

class SomethingToDispose : IDisposable 
{ 
    private SomethingDisposable resource = new SomethingDisposable(); 

    public void someMethod() 
    { 
    //code that uses resource 
    } 

    //code to dispose of "resource" in a Dispose method. 
} 

클래스가 리소스를 처리하는 using 문을 넣어 정말 아무데도 없다. 필드에 일회용 객체를 저장하고 처분 할 책임이있는 처분 객체이므로 폐기 처분을 보장하는 가장 좋은 방법은 IDisposable을 구현하는 것입니다.

+1

저장소 클래스는'using' 문으로 호출되기 때문에 일회용이어야합니다. – Ropstah

+0

atbyrd가 Servy가이 대답을 게시 한 후'using'을 포함하도록 질문을 변경했습니다. –

관련 문제