实现和使用IDisposable的最低限度

时间:2010-09-22 10:00:40

标签: c# .net

我正在模仿.NET的会话,但有一些细微的差别(我的类只有预定义的字段 - 字符串或整数......)。 我已阅读MSDN和一些关于实施IDisposable的SO帖子,但看起来太多了。
我的计时器的Elapsed事件的事件处理程序调用一个静态方法,该方法应该处理发送给它的对象。

像这样:


        public APISession()
        {
            timer.Elapsed +=new ElapsedEventHandler(disposeSession);
            timer.Start();
        }
        private static void disposeSession(object obj,ElapsedEventArgs elapsedEventArgs)
        { 
             //Should dispose APISession here (not obj - which is the timer, 
             //but rather -this)
        } 
        public void Dispose()
        {
            throw new NotImplementedException();
        }

已添加:这是APISession的声明:

class APISession:IDisposable

有人可以告诉我如何处理当前的APISession对象吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

如果只使用disposeSession方法中的对象,则必须在那里处理它。只应通过实现IDisposable来处理类变量。

在disposeSession方法结束时,如果它实现了IDisposable,则添加以下代码来处理它。

if(toDispose is IDisposable)
  (toDispose as IDisposable).Dispose();

或者您可以像这样写

IDisposable disposable = toDispose as IDisposable;
if( disposable != null )
  disposable.Dispose();

修改 添加了由注释更正的强制转换,并使用as添加了版本并检查了null