2012-07-21 1 views
0

IDisposable 인터페이스를 구현하여 일회용 ADOX 카탈로그 인스턴스를 만들려고하는데 오류가 발생했습니다. ADOX.Catalog '에는'Dispose '와 no에 대한 정의가 없습니다. 확장 메서드 '폐기'유형 'ADOX.Catalog'의 첫 번째 인수를 받아들이는 볼 수 있습니다 (당신은? using 지시문 또는 어셈블리 참조가)ADOX 카탈로그 클래스를 사용하여 IDispoable을 구현하는 방법

이 내 코드

namespace Disposable 
{ 
class DBGen : IDisposable 
{ 
    Catalog cat; 
    public DBGen() 
    { 
     cat = new Catalog(); 
     cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=D:\\AccessDB\\NewMDB.mdb;" +"Jet OLEDB:Engine Type=5"); 
     Console.WriteLine("Database Created Successfully"); 
     cat = null; 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool b) 
    { 
     if (b) 
     { 
      cat.Dispose(); 
     } 
    } 
} 

}

저는 오전입니다.

에서 오류 발생
cat.Dispose(); 

이 문제가 발생하는 이유를 알려주십시오. Thansk

답변

0

필드 cat은 생성자에서 null로 설정되어 있으므로 항상 null입니다. null로 설정하기 전에 '잘라 내기'를 삭제하십시오.

당신이 생성자에서 cat=null;를 제거하고 다음과 같이 처리 다시 작성해야 클래스의 다른 somwhere cat을 사용하려는 경우 :

public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool b) 
    { 
     if (b) 
     { 
      if (cat!=null) { 
       var disposableCat = cat as IDisposable; 
       if (disposableCat != null) { 
        disposableCat.Dispose(); 
        cat=null; 
       } 
      } 
     } 
    } 
+0

잘, 나는 이미하지만 같은 문제를 시도! 나는 내가 구현하는 동안 Dispose()를 호출 할 수 없다는 것이 궁금하다 : IDisposable 인터페이스? – Suffii

+0

@Behseini 내 편집을 참조하십시오. –

+0

감사합니다 Achitaka, 귀하의 코드를 시도했지만 문제는 여전히 남아 있습니다! – Suffii