我有一个类实现了C#的SerialPort
,它以前是这样的:
public class AsyncSerial : IDisposable
{
SerialPort newPort; //Parameters declared in my constructor
//Constructor and other methods
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if(disposing)
{
this.Close();
this.Dispose();
}
}
}
这在代码分析中没有引起任何警告(我从MSDN获取了代码,作为如何正确完成的示例)。
由于我只打算声明一个SerialPort
,所以我想把我的类作为SerialPort
的子类,但现在我收到了无法解决的警告。
public class AsyncSerial : SerialPort
{
//Constructor and other methods
public new void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected new virtual void Dispose(bool disposing)
{
if(disposing)
{
this.Close();
this.Dispose();
}
}
}
代码警告说,dispose方法应该是new
的,因为它们隐藏了成员,我做到了,但我还得到了以下警告:
"Warning CA1063 Ensure that 'AsyncSerial.Dispose()' is declared as public and sealed"
将其标记为sealed意味着它必须被标记为override
(否则我会得到编译器错误),将其标记为override意味着它可以是new,所以我最终得到了:
Error CS0506 'AsyncSerial.Dispose()': cannot override inherited member 'Component.Dispose()' because it is not marked virtual, abstract, or override
我不知道在具有父类IDisposable
的类上实现disposing的“正确”方法。我找到的每个示例都只适用于将IDisposable
作为基础,但使我的类
public class AsyncSerial : SerialPort, IDisposable
{
//code
}
当我试图让 SerialPort
实现 IDisposable
接口时,代码分析器给出了警告。
我应该只是忽略有关确保 'AsyncSerial.Dispose()' 声明为 public 和 sealed 的警告,还是有一种正确的方法可以避免这种代码分析警告。