c# - 为什么要使用基类型声明方法参数?

标签 c# automated-refactoring

我已经声明了一个简单的方法来尝试将文本框的输入转换为 int,如下所示:

int TryConvertTextToInt(TextBox box)
{
    //do try catch
}

我的 IDE (SharpDevelop) 试图给我一些重构建议;具体来说,box 参数可以声明为基本类型(该工具给我的两个选项是 TextBoxBase 和 Control)。我知道我不想将此方法用于除 TextBox 以外的任何东西,如果我确实改变了主意,特定的参数类型将提醒我可能需要稍微更改该方法以适应更广泛的应用输入范围。我现在看不到更改类型的值(value),因为我没有预料到后一种情况,而且项目很小。

是否有我想要执行此操作的原因我想念,或者 IDE 是否过于有用?

最佳答案

在您的特定情况下,它可能不会产生太大差异。鉴于您正在传递 TextBox ,除了 TextBox 之外,您可能永远不想传递任何其他内容。 .

但是,在更一般的情况下,最好的做法通常是为方法设置最基本的参数类型和最具体的返回类型。正如您的 IDE 所建议的那样,这个想法是允许在以后的各种地方使用该方法。

举个例子,我们可以看一个集合的经典案例。许多开发人员会编写接受 List<T> 的代码。作为参数,然后执行 foreach通过那个。太好了,如果他们只处理 List<T> ,但是如果他们随后想要扩展以在其中合并一些 LINQ 表达式,突然他们正在处理一个 IEnumerable<T> .里面什么都没有 foreach循环需要 List<T> ,但是因为他们懒得使用基类(或者在这种情况下是接口(interface),这通常更好),他们现在要么必须更改方法签名——一个不破坏性的更改,但仍然不是一个好的更改必须制作——或添加 .ToList()到他们的 LINQ,这破坏了使用 LINQ 的许多优势(因为他们突然不得不循环遍历集合,可能 至少 三次)。

您总是希望确保您接受的是尽可能少的类或接口(interface),它仍然提供您将需要的成员。当然,也不要太保守:有正确的方式和通用的方式,就选择正确的方式,相同的话,通用的最好。

但同样,对于您的情况,我认为这没什么大不了的。您希望使用 TextBox 的其他成员的可能性更高提供,而不是你想要传递 TextBoxBase 的其他继承者或 Control到你的方法。真的,这完全取决于您的应用程序。回顾你拥有的和你需要的,然后建立你对这个警告的回应。对我来说,听起来你很高兴离开它,这就是你应该做的。但为了将来引用,这就是想法。

关于c# - 为什么要使用基类型声明方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25144962/

相关文章:

c# - 从 CharArray 中获取特定的字符

c# - 如何安装.NET 3.5开发的Windows服务?

Visual Studio Code 中的 Python 重构失败

java - 是否有命令行工具可以优化 Java 项目的导入?

eclipse-plugin - 重写节点后注释行消失

c# - 将 Logo 附加到 ASP.NET 生成的电子邮件时出错

c# - 无法在 NHibernate 中加载文件或程序集

c# - 在 asp.net core 中创建作用域工厂

refactoring - Eclipse CDT 重构项目死了吗?

java - 如何向多个类继承的方法添加参数