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

时间:2018-10-06 12:18:06

标签: c# visual-studio-2017 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在整个课程中都可以使用,这样我就不必将它传递给每个引用了/从每个引用传递给它...

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

“正在使用”和“ IDisposable”

(我不知道“使用”隐含了“ Dispose()”,我不需要“ Close()”。令人遗憾的是我的代码有效,并且我从未见过“ Dispose()”的示例”。也许回到乡村学习和学习古典希腊语会更容易?但是,我确实喜欢编码...)

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

请保持温柔……我是自学成才的……而且,据我所知,在Framework和C#上显然存在漏洞(深井)。谢谢!

1 个答案:

答案 0 :(得分:1)

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

这不是严格执行的规则,除非您打算将该类用作库或将其公开给外部程序集。

更多信息可以在这里找到:https://docs.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);
    }
}