0

私は他のいくつかの大学でこのプロジェクトに取り組んでいます。それは上に構築されてWindows MDI formsおり、顧客の特定のニーズに応じてフォームをロードするためのカスタムメソッドがあります。

最初は、メソッドは2つのパラメーターのみを取得する必要がありました。

protected void LoadForm<T>(ToolStripButton formButton, string buttonText) where T : Base Form

それでも継承されたコードであるため、パラメーターを渡す必要のないいくつかのフォームを継承するため、次のメソッドを使用しました。

protected void LoadForm<T>()
{
    LoadForm<T>(null, null);
}

それから私の大学は別のパラメータを渡す必要がありました:long? EntityIdそして再び既存のコードを壊さないために彼は上記のメソッドを:に変更しました

protected void LoadForm<T>(long? loadEntityId = null) where T : BaseForm
{
    LoadForm<T>(null, null, loadEntityId);
}

そして、ビジネスロジックを使用した実際の方法は次のようになりました。

protected void LoadForm<T>(ToolStripButton formButton, string buttonText, long? loadEntityId = null) where T : BaseForm

ここで、4番目のパラメーターを自分で渡す必要があります。これも、前のコードを壊さないという問題が実際に発生しています。論理は正しいと思いましたが、そうではなかったようです。ブールパラメータを渡す必要があるbool IsClosingFormので、次のようなビジネスロジックを使用してメソッドを作成しました。

protected void LoadForm<T>(ToolStripButton formButton, string buttonText, long? loadEntityId = null, bool IsClosingForm= true) where T : BaseForm

そして、boolパラメーターを渡す必要がある状況を処理するための新しいメソッドを追加します。

protected void LoadForm<T>(bool IsClosingForm= true) where T : BaseForm
{
    LoadForm<T>(null, null, null, IsClosingForm);
}

また、大学のメソッドを変更して、4つのパラメーターのメソッドを呼び出します。

protected void LoadForm<T>(long? EntityId = null) where T : BaseForm
{
    LoadForm<T>(null, null, EntityId, true);
}

しかし、それはそのように機能しておらず、私が得るエラーは次のとおりです。

protected void LoadForm<T>(long? EntityId = null)protected void LoadForm<T>(bool IsClosingForm= true)メソッドの間の呼び出しがあいまいです

ここでロジックを取得していないことは明らかなので、2つの質問があります。コードを変更して機能させる方法と、可能であれば、間違いの原因を誰かに指摘して、この背後にあるロジックを取得できるようにします。最初はとても簡単な作業のように見えましたが、今では理解できないままにしておくべきではない何かが欠けていると思います。

4

2 に答える 2

2

これはあいまいな呼び出しです。

LoadForm<T>()

この呼び出しは、次の2つの方法のいずれかとして解釈できます。

  • LoadForm<T>(long? EntityId = null)
  • またはとしてLoadForm<T>(bool IsClosingForm= true)

パラメーターにデフォルト値を指定したため、引数が指定されていない場合、コンパイラーは2つのオーバーロードを区別できません。

たぶん、デフォルト値を削除して、引数を期待しない別のオーバーロードを作成することができます。この新しいオーバーロードは、LoadFormがパラメーターなしで呼び出されたときに使用されます

于 2013-03-06T13:12:58.477 に答える
0

0または1を渡していて、それがaであるか、boolまたはメソッド呼び出しでlong?aにキャストされて、として登録されているかどうかがあいまいである可能性はありますか 。longlongbool

于 2013-03-06T13:10:28.197 に答える