下面是我正在使用的全班,我有两个问题,1这是Dispose()的正确使用,还有,为什么我得到错误No Overload for method'dispose'需要1个参数。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Crawler { class LoggingClass : IDisposable { public void GenericLogging(string systemMsg, string SystemClass, string SystemSection, string ID, string FixID, string baseURL, string mysqlQueryName, string mysqlQuery) { string Loggingall = " insert into tblLogs " + "set SystemMsg='" + systemMsg.Replace("'","''") + "'" + ",SystemClass = '" + SystemClass.Replace("'", "''") + "'" + ",SystemSection = '" + SystemSection.Replace("'", "''") + "'" + ",ID = '" + CarID.Replace("'", "''") + "'" + ",FixID = '" + FixID.Replace("'", "''") + "'" + ",baseurl = '" + baseURL.Replace("'", "''") + "'" + ",mysqlqueryName = '" + mysqlQuery.Replace("'", "''") + "'" + ",mysqlquery = '" + mysqlQuery.Replace("'", "''") + "'" + ",TimeStamp = Now()"; MySQLProcessing.MySQLProcessor MYSQLP = new MySQLProcessing.MySQLProcessor(); MYSQLP.MySQLInsertUpdate(Loggingall, "Loggingall"); } public void Dispose() { Dispose(true); // Take yourself off the Finalization queue // to prevent finalization code for this object // from executing a second time. GC.SuppressFinalize(this); } } }
这是我更新的代码: }
这是调用它的正确方法吗?我是否还必须致电处理?
答案 0 :(得分:4)
正如其他回答者所提到的,看起来你不需要实现IDisposable。你根本没有课堂领域,所以没有什么可以清理的。
假设课程的内容比你所展示的要多,那么你就是按照实现IDisposable的模式,但是你只完成了一半。
模式是IDisposable.Dispose()
,终结器(~LoggingClass
)都调用常用方法Dispose(bool)
。在Dispose(bool)
方法中,如果布尔值传递为true,则应清理托管和非托管资源,并且只有在传递false时才清理非托管资源。
这是我用于实现IDisposable的代码。
~LoggingClass()
{
this.Dispose(false);
}
protected bool Disposed { get; private set; }
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!this.Disposed)
{
if (disposing)
{
// Perform managed cleanup here.
}
// Perform unmanaged cleanup here.
this.Disposed = true;
}
}
看起来您添加了更新的代码,然后将其删除。但是,这是我对你如何称呼它的评论。
使用当前拥有的GenericLogging方法,您根本不需要IDisposable。但是,我会做一些改进代码的事情。
using
语句,但你会
最终创造&在代码中销毁数千个对象。
创建一个LoggingClass对象,并将其保留在整个对象中
程序的长度,而不仅仅是一个日志语句。using
语句)。答案 1 :(得分:0)
不,这不是IDisposable
的正确用法,因为你似乎并没有真正处置任何东西。这也是导致错误的原因;你已经取出了一些自动生成的代码。把它放回去(它看起来像这样)并按照评论:
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if(!disposed) {
disposed = true;
if(disposing) {
// Clean up managed resources, like files or GDI objects
}
// Clean up unmanaged resources, like COM components
}
}
答案 2 :(得分:-1)
为什么我收到错误没有重载方法'dispose'需要1个参数。
因为您没有为bool
方法接受Dispose()
的重载。
这是正确使用Dispose()还是
很难说。您的类没有显示的托管或非托管资源,因此该方法基本上不执行任何操作。 (实际上它会调用GC.SuppressFinalize(this)
,这会让事情变得更糟)