【发布时间】:2009-10-21 19:51:02
【问题描述】:
我有两个控制台应用程序,查询和更新,它们共享一些功能。我想让这两个类继承自一个公共基类,但问题是,对于控制台应用程序,我必须有一个 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 变量对我来说似乎是一个设计问题。我这样做的原因是:
- 我可以在
ConsoleBase中定义protected static方法,这些方法可供派生类中的其他static方法访问。 - 我可以将命令行参数传递给
ConsoleBase的构造函数,做一些普通的事情,然后通过public实例上的public属性和方法再次访问派生类中的参数。李>
所以在派生类中,我在ConsoleBase 的实例上混合了对方法/属性的调用,例如
_consoleBase.UseDebugMode()
以及调用继承的静态方法和访问在ConsoleBase 中定义的继承常量,例如
printWarning(CONST_MSG_IN_BASE_CLASS);
我可以以某种方式清理它吗?从一个类继承并保留该基类的实例以供使用是不是很糟糕?
【问题讨论】:
标签: c# inheritance console-application abstraction