3

コンストラクターでステートメントを使用してusing、後で使用するためにオブジェクトのインスタンスを宣言できますか。例えば。

public class TestClass {

   private DataClassesDataContext _dataContext;

   public TestClass(string connString){
       using (this._dataContext =  DataClassesDataContext(connString));
    }

   private bool someMethod(){
       _dataContext.instanceMethod(); // i want to use instance methods wherever needed and define once
   }
}
4

4 に答える 4

1

MSDNによると:

using ステートメントは、オブジェクトの Dispose メソッドを正しい方法で呼び出します。また、(前に示したように使用すると) Dispose が呼び出されるとすぐに、オブジェクト自体がスコープ外になります。

using ステートメントは、基本的に、try/finally のシンタックス シュガーです。

 try
  {
    _dataContext = new DataClassesDataContext(connString);
  }
  finally
  {
    if (_dataContext != null)
      ((IDisposable)dataContext).Dispose();
  }

このように見ると、datacontext はもはやスコープ外であるため、他のメソッドで必要に応じて使用できないことが明らかになるはずです。この問題を解決するには、クラスを実装する必要がありますIDisposeable

于 2013-07-01T14:13:53.283 に答える
0
using (this._dataContext =  DataClassesDataContext(connString));

と同じです

try
{
    this._dataContext =  DataClassesDataContext(connString);
}
catch
{

}
finally
{
    if(this._dataContext!=null)
             ((IDisposable)this._dataContext).Dispose();
}

したがって、コンストラクターで_dataContextが破棄され、使用できなくなります。インターフェイスを実装する必要があり、次のように必要な場所にステートメントIDisposableを使用できます。using

using (TestClass test = new TestClass("conn"))
{
   //your code
}
于 2013-07-01T14:07:31.710 に答える