0

我正在与其他一些大学合作开展这个项目。它建立在基础之上Windows MDI forms,并且由于客户的特定需求,我们有一个自定义方法来加载表单。

一开始,该方法只需要两个参数:

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

现在我需要自己传递第四个参数,并且不破坏先前代码的问题是实际的。我以为我的逻辑是正确的,但似乎我没有。我需要传递一个布尔参数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);
}

并且还修改了我的colleges方法来调用一个四参数的方法:

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

但它不是那样工作的,我得到的错误是:

protected void LoadForm<T>(long? EntityId = null)andprotected void LoadForm<T>(bool IsClosingForm= true)方法之间的调用不明确

很明显,我没有得到这里的逻辑,所以我有两个问题 - 如何修改代码以使其工作,如果可能的话,我希望有人指出导致我错误的原因,以便我可以得到这背后的逻辑。首先,这似乎很容易,但现在我想我错过了一些我不应该不理解的东西。

4

2 回答 2

2

这是模棱两可的电话:

LoadForm<T>()

该调用可以解释为以下两种方法之一:

  • LoadForm<T>(long? EntityId = null)
  • 或作为LoadForm<T>(bool IsClosingForm= true)

由于您已为参数指定了默认值,因此当未提供参数时,编译器无法区分这两个重载。

也许您可以删除默认值并创建另一个不需要任何参数的重载。当不带参数调用 LoadForm 时,将使用这个新的重载

于 2013-03-06T13:12:58.477 回答
0

您是否有可能传入 0 或 1 in 并且它对于它是 aboollong?可能long在方法调用中将其强制转换为 a 以确保注册为long而不是 bool

于 2013-03-06T13:10:28.197 回答