3

いくつかの機能を共有する2つのコンソールアプリ、QueryとUpdateがあります。2つのクラスを共通の基本クラスから継承させたかったのですが、問題は、コンソールアプリの場合、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私がこれをしている理由は次のとおりです:

  1. 派生クラスの他のメソッドにアクセスできるメソッドを定義することができますprotected staticConsoleBasestatic
  2. コマンドライン引数をのコンストラクターに渡し、一般的な処理を実行してから、のインスタンスのプロパティとメソッドをConsoleBase介して派生クラスの引数に再度アクセスできます。publicConsoleBase

ConsoleBaseしたがって、派生クラスでは、インスタンスのメソッド/プロパティへの呼び出しが混在しています。

_consoleBase.UseDebugMode()

継承された静的メソッドを呼び出し、で定義されている継承された定数にアクセスするだけでなくConsoleBase、たとえば

printWarning(CONST_MSG_IN_BASE_CLASS);

どうにかしてこれをクリーンアップできますか?クラスから継承するだけでなく、その基本クラスのインスタンスを保持して作業するのは悪いことですか?

4

3 に答える 3

1

はい、保護された静的メインで基本クラスを定義し、継承クラスの Main メソッドから BaseClass.Main(args) を呼び出すことができます。

この構文はより正確です:

public class BaseApp
{
    public static Main(String[] args)
    {
        // TODO: ...
    }
}

public class App1 : BaseApp // Same for App2
{
    // There is no need to keep a reference of the base class
    // if you are accessing static methods only

    public static Main(String[] args)
    {
        BaseApp.Main(args); // Access via class, not via instance
    }
}
于 2009-10-21T19:58:03.687 に答える
1

このように静的メソッドとインスタンス メソッドを混在させないでください。

静的メソッドが提供する責任を、継承可能な別のクラスに分離することを検討してください。非静的機能を、Update および Query 内で集約およびインスタンス化する別個のクラスにします。

さらに、Update と Query が ConsoleBase の派生物である場合、なぜ集約インスタンスが必要なのですか?

于 2009-10-21T19:59:15.400 に答える
0

あなたがそうする必要はないと思います。コマンドライン引数を指定して ConsoleBase.Main() 関数を呼び出してみませんか?

基本クラスのインスタンスを持つことは、設計上の問題です。

于 2009-10-21T20:02:38.903 に答える