2010-11-02 5 views
0

Ниже мой код:Как эффективно использовать «использование»?

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

Какова связь между классами 'pgsqlConnection' и' v2Connection'? Стандартная стандартная стандартная Btw диктует, что имя класса должно начинаться с буквы верхнего регистра в C#. –

+0

В настоящее время ничего подобного. Должен ли я заменить pgsqlConnection на v2Connection? – RKh

+0

Почему Open и Close возвращают ints? Вы не считаете коды ошибок правильно? –

ответ

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(); 
} 
4

Я хотел бы следовать схеме, используемой в существующих SqlConnection классов - Open и Close можно назвать любой действительный экземпляр (данную действительным состоянием для тех ОПС, конечно), но Dispose будет Close соединения, если это явно не сделано в коде на a Open -ed conection.

using действительно ортогонален этому - это тонкость на языке, облегчающая вашу задачу в обеспечении того, чтобы лежащие в основе неуправляемые ресурсы не просочились для объектов IDisposable. В вашем случае это необходимо, если экземпляр Open, когда он выходит из области видимости, и инкапсуляция экземпляра через using поставляет необходимый вызов Dispose() в нужное время.

1

Класс pgsqlConnection должен реализовывать интерфейс IDisposable. Это то, что делает оператор using, вызывает метод Dispose автоматически.

Смежные вопросы