-1

すべて、私は別のアプリケーションから、またはスタンドアロンユーティリティとして実行したいアプリケーションを持っています。appBからのappAの起動を容易にするために、/Program.csで次のコードを使用しMain()ます

[STAThread]
static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new SqlEditorForm(args));
} 

今、SqlEditorForm私は2つのコンストラクターを持っています

public SqlEditorForm(string[] args)
    : this()
{
    InitializeComponent();

    // Test if called from appB...
    if (args != null && args.Count() > 0)
    {
        // Do stuff here...
    }
}

とdeafult

public SqlEditorForm()
{
    // Always do lots of stuff here...
}

これは私には問題ないように見えますが、スタンドアロン(args.Length = 0)として実行すると、SqlEditorForm(string[] args)コンストラクターが呼び出され、コンストラクターにステップインして実行する前にInitializeComponent();、クラスのすべてのグローバル変数を初期化してから、デフォルトのコンストラクター直接ステップインします。

質問、コンストラクターの連鎖が間違った順序で発生しているようです。理由を知りたいですか?

御時間ありがとうございます。

4

1 に答える 1

1

すべてのロジックをパラメーター付きのコンストラクターに移動し、パラメーターのないコンストラクターからそのコンストラクターを呼び出して、デフォルトのパラメーター値を渡します。

public SqlEditorForm()
    :this(null)
{        
}

public SqlEditorForm(string[] args)
{   
    InitializeComponent();
    // Always do lots of stuff here...

    if (args != null && args.Count() > 0)
    {
        // Do stuff here...
    }
}
于 2012-12-11T12:53:49.557 に答える