Confused с использованием "использования" Statement С#
Согласно Библиотека MSDN
using Statement (C# Reference)
Defines a scope, outside of which an object or objects will be disposed.
Но я получил этот код, размещенный здесь у какого-то пользователя, и я смутился об этом: (см. мой комментарий к коду)
using (OleDBConnection connection = new OleDBConnection(connectiongString))
{
if (connection.State != ConnectionState.Open)
connection.Open();
string sql = "INSERT INTO Student (Id, Name) VALUES (@idParameter, @nameParameter)";
using (OleDBCommand command = connection.CreateCommand())
{
command.CommandText = sql;
command.CommandType = CommandType.Text;
OleDBParameter idParameter = command.CreateParameter();
idParameter.DbType = System.Int32;
idParameter.Direction = Parameterdirection.Input;
idParameter.Name = "@idParameter";
idParameter.Value = studentId;
OleDBParameter nameParameter = command.CreateParameter();
try
{
command.ExecuteNonQuery();
}
finally
{
// Is it still necessary to dispose these objects here?
command.Dispose();
connection.Dispose();
}
}
}
В приведенном выше коде используется ли оператор using
правильно?
Я смущен, может кто-нибудь объяснить, как использовать оператор using
и его область охвата и когда, где и зачем его использовать. Спасибо..
Ответы
Ответ 1
Оператор using является сокращением для ручной установки блока try/finally
.
Итак,
using( x ){
...
}
То же, что и
try{
...
}finally{
if( x != null ){ x.Dispose(); }
}
И они сгенерируют тот же IL при компиляции.
Компилятор даст вам ошибку в случае, если x
не реализует IDisposable
.
Ответ 2
Блок finally
(и, следовательно, в этом случае try
) является избыточным, что делает using
, он вызывает Dispose
в объекте IDisposable
, с которым он инициализируется, когда using
(независимо от исключений или их отсутствия).