[英]Modifying method to accept different number and type of parameters
我正在与其他一些大学合作开展这个项目。 它基于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
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);
}
并且还修改我的院门方法来调用四参数方法:
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)
方法之间的调用不明确
显而易见,我没有得到这里的逻辑,所以我有两个问题 - 如何修改代码使其工作,如果可能的话,我希望有人指出导致我的错误的原因,以便我可以得到这背后的逻辑。 首先,这似乎很容易,但现在我觉得我错过了一些我不应该理解的东西。
这是一个含糊不清的电话:
LoadForm<T>()
该调用可以解释为以下两种方法之一:
LoadForm<T>(long? EntityId = null)
LoadForm<T>(bool IsClosingForm= true)
由于您已为参数指定了默认值,因此在未提供参数时,编译器无法区分这两个重载。
也许您可以删除默认值并创建另一个不期望任何参数的重载。 在没有参数的情况下调用LoadForm时,将使用此新重载
你有可能传入0或1并且它是一个模糊的,因为它是一个bool
或long?
可能在方法调用中将其强制转换为long
,以确保注册long
而不是bool
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.