CA1001 在包含的扩展类(初学者类)上实现 IDisposable



我真的不明白,我所有的学习只会让我更加困惑。

代码片段:

namespace Family_Finances
{
class sqlStuff
{
private SQLiteConnection m_dbConnection;
//DialogResult msgBoxResult = DialogResult.Ignore;
//string myDirectory;
public int beepFreq = 880;
public int beepLength = 500;
private SQLiteConnection dbConn;
private string dbSelect()
{

我正在尝试做的是创建一个类,没关系,我什至还没有引用它,它是可重用的,并将我所有的 sqlite 支持代码放入一个类中。

我已经恢复到原始代码,因为我尝试了所有内置的更正,粪堆越来越深,包括更改主命名空间中的代码,甚至没有引用它。

我希望我的db_conn在整个课堂上都可用,这样我就不必在每个参考中传递它......

我知道我有两个概念有问题...

">

使用"和"可识别">

(我不知道"使用"意味着"Dispose((",我也不需要"Close(("。很遗憾我的代码有效,我从未见过带有"Dispose(("的示例。也许回到田园研究并学习古典希腊语会更容易?但是,我确实喜欢编码...

那么我该如何解决这个问题,以便我可以在其他项目以及这个项目中重用代码......

请温柔...我是自学成才的...而且,我对框架和 C# 的理解显然存在漏洞(深井(。谢谢!

根据 Microsoft 规则,任何包含实现 IDisposable接口的字段的类也应在包含对象上实现 IDisposable 模式。您的 SQLiteConnection 对象实现了此模式。

这不是严格强制实施的规则,除非您计划将该类用作库或将其公开给外部程序集。

更多信息可以在这里找到:https://learn.microsoft.com/en-us/visualstudio/code-quality/ca1001-types-that-own-disposable-fields-should-be-disposable?view=vs-2017

不完整的示例:

class sqlStuff : IDisposable
{
private SQLiteConnection m_dbConnection;
//DialogResult msgBoxResult = DialogResult.Ignore;
//string myDirectory;
public int beepFreq = 880;
public int beepLength = 500;
private SQLiteConnection dbConn;
public void Dispose()
{
m_dbConnection?.Dispose();
dbConn?.Dispose();
Dispose(true);
GC.SuppressFinalize(this);
}
}

最新更新