В ответ на предыдущий вопрос кто-то рекомендовал:
имеет SqlConnection переменную-член вашего класса, но делает класс IDisposable и избавляется от SqlConnection, когда класс удаляется
Я собрал реализацию этого предложения (ниже), но хотел проверить, правильна ли эта реализация (очевидно, в настоящее время она ничего не делает, кроме открытия соединения, но идея в том, что там будут методы, которые бы использовать соединение и которое сможет положиться на него существующее и открытое).
public class DatabaseRecord : IDisposable
{
protected SqlConnection connection;
public DatabaseRecord()
{
connection = new SqlConnection("ConnectionString");
connection.Open();
}
// IDisposable implementation
private bool disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
connection.Dispose();
}
disposed = true;
}
}
// Destructor
~DatabaseRecord()
{
Dispose(false);
}
}
Будет ли это работать? Будут ли классы, использующие экземпляры DatabaseRecord, делать что-то особенное, или будет автоматически вызываться Dispose после того, как экземпляры больше не используются или на них не ссылаются? Является ли это более эффективным / лучшим, чем использование using (var connection = new SqlConnection("...")) { }
в каждом отдельном теле метода, где требуется соединение?