以下是我的代码:
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();
如何在上面的代码中使用这个界面?
答案 0 :(得分:4)
我会遵循现有SqlConnection
类中使用的模式 - Open
和Close
可以在任何有效实例上调用(当然,这些操作的有效状态为)但是{{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方法。