我有類似於以下代碼。在類級變量上使用using語句是不好的做法嗎?
class MyController
{
[ThreadStatic] private DbInterface db;
public void ImportAllData()
{
using (db = new DbInterface())
{
var records = PullData();
PushData(records);
}
}
private DbRecord[] PullData()
{
return db.GetFromTableA();
}
private void PushData(DbRecord[] records)
{
db.InsertIntoTableB(records);
}
}
另一種方法是維護起來很麻煩。
class MyController
{
public void ImportAllData()
{
using (var db = new DbInterface())
{
var records = PullData(db);
PushData(records, db);
}
}
private DbRecord[] PullData(DbInterface db)
{
return db.GetFromTableA();
}
private void PushData(DbRecord[] records, DbInterface db)
{
db.InsertIntoTableB(records);
}
}
據我所看到的,我的第一個執行:
- 是線程安全的(假設
DbInterface
是線程安全的), - 防止任何其它進程從觸摸
db
變量, - 確保
db
將始終處置,即使在例外情況下也是如此。
對類範圍的變量使用using
語句是不好的做法嗎?我錯過了什麼嗎?
考慮使用擴展?或者你打算做很多事情。 – 2013-02-12 00:51:54
有趣的是,如果你曾經做過Win Forms繪畫代碼,那麼OnPaint和Paint事件就非常像這樣,至少在將參考傳遞給使用塊之外。您傳遞的是分配給您的圖形上下文,其管理/處置由調用者處理,因此您不會將其自行處理爲實際的繪製方法。 – tcarvin 2013-02-12 00:57:19
@DanSaltmer,我打算在其他控制器中使用'DbInterface'類。我希望控制器可以訪問所有'DbInterface'方法,但我不想讓控制器知道其他私有方法。據我的理解,擴展方法將適用於所有'DbInterface'實例。或者我誤解了你? – 2013-02-12 01:03:12