我们可以在构造函数中使用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
}
}
答案 0 :(得分:8)
您必须自己实施IDisposable
并使用Dispose
方法在数据上下文中调用Dispose
。
public class TestClass : IDisposable {
private DataClassesDataContext _dataContext;
public TestClass(string connString){
_dataContext = new DataClassesDataContext(connString);
}
private bool someMethod(){
_dataContext.instanceMethod(); // i want to use instance methods wherever needed and define once
}
public void Dispose(){
_dataContext.Dispose();
}
}
答案 1 :(得分:6)
目前尚不清楚您对做的using
语句的期望。它所做的就是确保在块的末尾调用Dispose
。
所以基本上你要创建一个DataClassesDataContext
(我假设你错过了new
关键字...),在一个字段中存储一个引用,然后立即处理它。这样做不会很好 - 你应该摆脱using
语句,但很可能使你的类实现IDisposable
,这样当TestClass
的实例被处理掉时,你就处理掉了数据背景。
答案 2 :(得分:1)
根据MSDN:
using语句在对象中调用Dispose方法 正确的方式,(当你使用它如前所示)它也会导致 一旦调用Dispose,对象本身就会超出范围。
using语句基本上是try / finally的语法糖。
try
{
_dataContext = new DataClassesDataContext(connString);
}
finally
{
if (_dataContext != null)
((IDisposable)dataContext).Dispose();
}
以这种方式看待它很明显,datacontext不再在范围内,因此不能被其他方法使用。要解决此问题,您应该使类实现IDisposeable
。
答案 3 :(得分: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
}