Проблема
Я вижу, что в оракуле у вас есть:
this.Timeout = OracleStoppy.Elapsed;
Console.WriteLine("Connection closed. \nThe connection was active for {0}", Timeout);
Но в sql:
TimeSpan reportedTimeout = Timeout;
Console.WriteLine("Connection closed. \nThe connection was active for {0}", reportedTimeout);
Это должно быть
this.Timeout = SqlStoppy.Elapsed;
Console.WriteLine("Connection closed. \nThe connection was active for {0}", Timeout);
Не правда ли?
Советы
Вы используете родительский класс, поэтому вам не нужны две секундомеры, только однанеобходимое, иначе наследование бесполезно, и вы повторяете код.
Вы должны рассмотреть также удалить некоторые сеттеры.
И переместить CurrentConnection, который повторяется, как защищенный.
Это должно быть:
public abstract class DataBaseConnection
{
protected bool CurrentConnection;
public string ConnectionString { get; }
public TimeSpan Timeout { get; }
public Stopwatch Stoppy { get; }
public abstract void OpenConnection();
public abstract void CloseConnection();
public DataBaseConnection()
{
Timeout = new TimeSpan();
Stoppy = new StopWatch();
}
}
Также используйте шаблон вызова между конструкторами:
public OracleConnection()
{
...
}
public OracleConnection(string connectionString)
: this()
{
...
}
Вы повторяете слишком много одного и того же кода, и вам действительно следует реорганизовать и улучшить абстрактные вещи.
Когда кодповторить вы можете:
Когда переменные повторяются в дочерних классах, вы можете удалить их, чтобы иметь только одну в родительском классе.
Вы делаетечто играя с модификаторами, такими как public
, private
, protected
, internal
, abstract
, virtual
, override
...
Вы должны также переименовать некоторые переменные, чтобы быть болеенепротиворечиво и согласованно.
Правило состоит в том, что имя должно быть простым и точно указывать, что оно такое.
Например, Chrono
может быть лучше, чем Stoppy
, а также index
или indexRow
лучше, чем i
.
Так что здесь Duration
или Elapsed
может быть лучше, чем Timeout
, что указывает на задержку остановки попытки подключения.
Такжепоскольку классы имеют имена Connection
, вам не нужно указывать OpenConnection
и CloseConnection
: Open
и Close
достаточно.
Возможно, вы найдете это полезным:
Как мне улучшить свои знания в C #
Как выбрать модификатор частного и защищенного доступа
Что такое полиморфизм