我声明了一个简单的方法来尝试将文本框的输入转换为 int,如下所示:
int TryConvertTextToInt(TextBox box)
{
//do try catch
}
我的 IDE(SharpDevelop)尝试给我一些重构建议;具体来说,box 参数可以声明为基类型(该工具为我提供的两个选项是 TextBoxBase 和 Control)。我知道我不想将此方法与 TextBox 以外的任何内容一起使用,如果我以后改变主意,特定的参数类型会提醒我该方法可能需要稍微更改以适应更广泛的范围输入范围。我现在看不到更改类型的价值,因为我预计不会出现后一种情况,而且该项目很小。
是否有我想要执行此操作但缺少的原因,或者 IDE 是否过于有帮助?
在您的具体情况下,它可能不会产生太大的影响。鉴于您正在通过TextBox
,你可能永远不想传递除TextBox
.
然而,在更一般的情况下,最佳实践通常是为方法提供最基本的参数类型和最具体的返回类型。正如您的 IDE 所建议的,这个想法是允许以后在各种地方使用该方法。
作为例子,我们可以看一下集合的经典案例。许多开发人员会编写接受List<T>
作为参数,然后执行foreach
通过那。那太好了,如果他们只处理List<T>
,但是如果他们随后想要扩展以在其中合并一些 LINQ 表达式,那么他们突然要处理一个IEnumerable<T>
。里面什么都没有foreach
循环需要一个List<T>
,但是因为他们懒得使用基类(或者在这种情况下是接口,这通常更好),所以他们现在要么必须更改方法签名——这是一个非破坏性的更改,但仍然不是一个好的更改必须制作——或添加一个.ToList()
到他们的 LINQ,这破坏了使用 LINQ 的许多优点(因为突然他们必须循环遍历集合at least三次)。
您始终希望确保您接受尽可能少的类或接口,但仍提供您需要的成员。当然,不要太保守:如果有正确的方法和通用的方法,就选择正确的方法,但如果它们相同,则通用的最好。
但同样,就你的情况而言,我认为这没什么大不了的。您想要使用其他成员的可能性可能更高TextBox
提供的,而不是你想要传递的其他继承者TextBoxBase
or Control
按照你的方法。实际上,这完全取决于您的应用程序。回顾一下你拥有的和你需要的,然后据此构建你对这个警告的回应。对我来说,听起来你很高兴离开它,这就是你应该做的。但为了将来的参考,这就是想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)