完成在回答一個previous question有人這樣做可以清理一個SqlConnection的建議:建立在C#中IDisposable的類時,與
擁有的SqlConnection類的成員變量,但使課堂IDisposable接口和處置當
我已經把這個建議(下)的實現,但要檢查這個實現是正確的類設置關閉SqlConnection(顯然目前還不做任何事情,除了開放的連接,但這個想法是在t中會有方法在這裏將使用連接,並且能夠依賴它存在並且正在打開)。
public class DatabaseRecord : IDisposable
{
protected SqlConnection connection;
public DatabaseRecord()
{
connection = new SqlConnection("ConnectionString");
connection.Open();
}
// IDisposable implementation
private bool disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
connection.Dispose();
}
disposed = true;
}
}
// Destructor
~DatabaseRecord()
{
Dispose(false);
}
}
這項工作?使用DatabaseRecord實例的類是否需要做任何特殊的事情,或者一旦實例不再被使用/引用,會自動調用Dispose?在需要連接的每個單獨方法體中使用using (var connection = new SqlConnection("...")) { }
效率更高嗎?
感謝您的答案。我想可能連接應該在'if(disposing)'塊中被關閉(我剛剛編輯了這個問題,所以它是基於你的響應),但最終決定不是因爲我希望它也可以在析構函數被調用(顯然它並不像那樣工作!)... 我希望這個類的消費者可能忘了類IDisposable的本質。他們需要使用'using'或直接調用'Dispose'使我回到其他實現(在每個方法中使用(新的SqlConnection()){}')。 – vitch 2010-01-07 13:54:19