首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在类中共享IDisposable资源?

问如何在类中共享IDisposable资源?
EN

Stack Overflow用户
提问于 2009-05-06 01:22:38
回答 3查看 215关注 0票数 1

我正在编写一些控制台应用程序,以便在SQLite数据库之间移动一些数据。连接的类和各种准备好的语句都实现了IDisposable,因此我使用using块实例化这些对象,如下所示:

代码语言:javascript
复制
using (SQLiteConnection sqlite_conn = new SQLiteConnection(connectionString))
{
    sqlite_conn.Open();
    using (SQLiteCommand sqlite_cmd = new SQLiteCommand())
    {
        sqlite_cmd.Connection = sqlite_conn;
        sqlite_cmd.CommandText = "INSERT INTO SOMETHING SOMETHING;";
        sqlite_cmd.ExecuteNonQuery();
    }
    sqlite_conn.Close();
}     

但是,我需要能够在一个方法中创建这些连接,然后在其他方法中调用它们。对于我来说,将这些连接存储为实例变量的最干净和最容易混淆的方法是什么?我想确保他们的.Dispose()方法是以一种智能的方式调用的,但是看不到一种很好的方法来确保所有的操作都发生在单个using块的上下文中。

我知道这是一个C#的新问题,所以请量身定做你的答案。如果您有一个建议的解决方案,我希望您包括一个代码示例来说明。

编辑:我的用例是一个控制台应用程序。有人传入源和目标连接字符串,控制台应用程序执行操作。我会让我的控制台类程序本身实现IDisposable吗?:

代码语言:javascript
复制
class Program : IDisposable
{
    private SQLiteConnection sourceConnection;
    private SQLiteConnection destinationConnection;

    public void Dispose()
    {
        sourceConnection.Dispose();
        destinationConnection.Dispose();
    }  
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-06 01:28:47

我需要能够在一个方法中创建这些连接,然后在其他方法中调用它们。对于我来说,将这些连接存储为实例变量的最干净和最容易混淆的方法是什么?

在这种情况下,保存这些实例变量的类本身应该实现IDisposable,在处理时应该确保连接也被释放。

另外,当您同时拥有多个IDisposables时,您可以用这种方式重写它,对它们进行分组并减少代码中的嵌套:

代码语言:javascript
复制
using (SQLiteConnection sqlite_conn = new SQLiteConnection(connectionString))
using (SQLiteCommand sqlite_cmd = new SQLiteCommand())
{
    sqlite_conn.Open();

    sqlite_cmd.Connection = sqlite_conn;
    sqlite_cmd.CommandText = "INSERT INTO SOMETHING SOMETHING;";
    sqlite_cmd.ExecuteNonQuery();
} // no need to call .Close(): IDisposable normally handles it for you
票数 2
EN

Stack Overflow用户

发布于 2009-05-06 01:29:55

您可以让类实现IDisposable,并确保在Dispose方法中清理连接等。然后调用类的方法可以使用(MyClass c.)。

票数 1
EN

Stack Overflow用户

发布于 2009-05-06 01:33:18

一种方法是让类实现IDisposable。在类的Dispose方法中,调用连接的Dispose方法和命令等。然后可以在using块中使用类的实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/827644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档