我有这段代码:
try
{
using(conn)
{
conn.UpdateScheduledTaskGuid(taskID, taskGUID);
}
}
在 conn 变量上我收到错误“无法将类型DataProvider隐式转换为System.IDisposable ”
DataProvider是我在这个项目中创建的自定义类,它是上面conn变量的类型。
我想我需要让DataProvider实现IDisposable,但我不确定这是否真的存在问题,如果我必须实现它,那么非托管资源是否有问题需要我添加IDisposable?
这是DataProvider类:DataProvider.txt
答案 0 :(得分:4)
来自the MSDN page about the using Statement。
Provides a convenient syntax that ensures the correct use of IDisposable objects.
和
所有这些类型必须实现 IDisposable接口。
所以,是的,你需要让你的DataProvider实现IDisposable来使用它,因为你在使用块中。
答案 1 :(得分:2)
“using”关键字只是一种编写异常安全代码的有用方法,当变量超出范围时会调用Dispose()。如果你不打算调用Dispose(),它就没用了。该函数由IDisposable接口声明。
如果您没有非托管资源,则无论如何都不应该使用“使用”。
这里有一个很好的描述: http://www.codeproject.com/KB/cs/using_and_IDisposable.aspx
答案 2 :(得分:2)
DataProvider
必须确实实现IDisposable
,因为它拥有IDbConnection
,必须妥善处理。
答案 3 :(得分:0)
是的,为了使用'using'语句,对象需要实现IDisposable。我查看了一些代码,我没有看到任何非托管代码(虽然我可能会弄错,因为那里有大量的代码)。