У меня есть два консольных приложения, Query и Update, которые совместно используют некоторые функции. Я хотел, чтобы два класса наследовали от общего базового класса, но проблема в том, что для консольного приложения у меня должна быть функция static Main
. В настоящее время у меня есть следующее:
namespace Utils
{
public class ConsoleBase
{
protected const int ERROR_EXIT_CODE = 1;
protected static void printWarning(string msg) {...}
public ConsoleBase(IEnumerable<string> args) { ... }
...
namespace Update
{
class Update : ConsoleBase
{
private static ConsoleBase _consoleBase;
public static void Main(string[] args) { ... }
...
namespace Query
{
class Query : ConsoleBase
{
private static ConsoleBase _consoleBase;
public static void Main(string[] args) { ... }
...
Мне кажется, что проблема проектирования заключается в том, чтобы как наследовать от ConsoleBase
, так и иметь его экземпляр как переменную static
в каждом производном классе. Я делаю это потому, что:
- У меня могут быть
protected static
методы, определенные в ConsoleBase
, которые доступны для других static
методов в производных классах.
- Я могу передать аргументы командной строки в конструктор для
ConsoleBase
, выполнить обычную работу, а затем снова получить доступ к аргументам в производных классах через public
свойства и методы в экземпляре ConsoleBase
.
Итак, в производных классах у меня есть смесь вызовов методов / свойств в экземпляре ConsoleBase
, например,
_consoleBase.UseDebugMode()
Помимо вызова унаследованных статических методов и доступа к унаследованным константам, которые определены в ConsoleBase
, например,
printWarning(CONST_MSG_IN_BASE_CLASS);
Можно как-нибудь это почистить? Разве плохо и наследовать от класса, и хранить экземпляр этого базового класса для работы с