2012-04-23 68 views
1

我想創建一個在using()語句中調用存儲庫類的方法。該班目前不是一次性的。在實現IDisposable之前,我有什麼需要考慮的嗎?實施IDisposable時需要考慮哪些風險?

using(var repo = new RespositoryClass()) 
{ 
    //do work 
} 
+2

爲什麼需要實現'IDisposable'?它使用一次性資源的事實並不意味着它需要實現'IDisposable'。 – Servy 2012-04-23 15:51:27

+0

@Servy:將其作爲答案發布;這是正確的! – 2012-04-23 15:52:31

+0

你的問題似乎很廣泛。我想不出任何具體的原因,我不知道你在擔心什麼,但這裏有一篇很好的文章,可以爲你的發展提供正確的信息。 http://www.codeproject.com/Articles/29534/IDisposable-What-Your-Mother-Never-Told-You-About – MilkyWayJoe 2012-04-23 15:52:33

回答

3

如果類使用非託管資源或初始化實現它的其他成員,則應該實施IDisposable。否則,如果你不需要它,不要使用它。

+0

我的想法正好 – Ropstah 2012-04-23 15:57:53

+1

*有其他成員/它擁有/實現IDisposable。如果別的東西負責/使用它,你不想處置一個你持有的對象。 – roken 2012-04-23 16:04:01

+0

@roken:好點。相應地解決了我的問題 – 2012-04-23 16:10:51

2

僅僅因爲你使用一個類內部的IDisposable對象並不意味着類需要實現IDisposable。

下面的示例類不需要實現IDisposable

class NotDisposable 
{ 
    public void someMethod() 
    { 
    using(SomethingDisposable resource = new SomethingDisposable()) 
    {...} 
    } 
} 

這裏是一個類,需要實現IDisposable的例子。

class SomethingToDispose : IDisposable 
{ 
    private SomethingDisposable resource = new SomethingDisposable(); 

    public void someMethod() 
    { 
    //code that uses resource 
    } 

    //code to dispose of "resource" in a Dispose method. 
} 

正如你在第二個例子中看到確實沒有任何地方讓全班把using語句來處置資源。由於它將一次性對象存儲在一個字段中,並且它是負責處理它的人,因此確保它被丟棄的最佳方式是實現IDisposable

+1

存儲庫類_does_需要一次性使用,因爲它使用'using'語句調用 – Ropstah 2012-04-23 15:57:04

+0

atbyrd在Servy發佈此答案後,將問題更改爲包括'using'。 – 2012-04-23 17:22:11

相關問題