如何有效地使用“使用”?

时间:2010-11-02 16:34:29

标签: c# .net-3.5

以下是我的代码:

using (pgsqlConnection conn = new pgsqlConnection(connStr))
{

} //automatically Dispose()    
public class v2Connection:IDisposable
{

    public void Dispose()
    {
        //close the connection and release resources
    }

}

这是我到目前为止在Connection类(v2Connection)中编写的内容。它在pgsqlConnection上给出错误,显然目前我没有一个具有此名称的类,也没有接口。

我想添加两个功能:打开和关闭。我不会在哪里调用Open()和Close()?如果我使用以下两种方法创建名称为IConnection的接口:

int Open();
int Close();

如何在上面的代码中使用这个界面?

3 个答案:

答案 0 :(得分:4)

我会遵循现有SqlConnection类中使用的模式 - OpenClose可以在任何有效实例上调用(当然,这些操作的有效状态为)但是{{1如果在Dispose - ed连接的代码中没有明确地完成连接,{}将Close连接。

Open与此完全正交 - 这是一种非常精确的语言,可以简化您的任务,确保潜在的非托管资源不会泄露using个对象。在您的情况下,如果实例在IDisposable超出范围时是必要的,并且通过Open封装实例会在适当的时间提供所需的using调用。

答案 1 :(得分:2)

您可以拥有连接的包装器:

using (MyConnectionWrapper conn = new MyConnectionWrapper ())
{

}

使用MyConnectionWrapper:

 public class MyConnectionWrapper : IDisposable
    {

        void OpenConnection();
        void CloseConnection();
        void Dispose();
    }

并在你班级的构造函数中

public MyConnectionWrapper ()
{
    OpenConnection();
}

并在Dispose函数中:

public void Dispose()
{
   CloseConnection();
}

答案 2 :(得分:1)

pgsqlConnection必须实现IDisposable接口。这就是using语句实际执行的操作,自动调用Dispose方法。