2012-04-23 42 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

相关问题