为什么应该使用基类型声明方法参数?

2023-11-29

我声明了一个简单的方法来尝试将文本框的输入转换为 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(使用前将#替换为@)

为什么应该使用基类型声明方法参数? 的相关文章

随机推荐

  • 在 System.Drawing 中找不到“点”

    我所知 Point存在于命名空间中系统图 但 Visual Studio 找不到它 using System Drawing class Flower public Point Location get private set 错误 找不到
  • 图像 (2D) 的 PSF(点扩散函数)

    我是图像分析 使用 Python 的新手 我想对我的数据 CT 扫描 应用 richardson lucy 反卷积 来自 skimage 为此 我通过特定的软件以 体素数 来估计PSF 它的值大约是 6 73 体素 但我不知道如何将它用作函
  • 如何在Python中获取当前模块属性的引用

    我想要做的在命令行中看起来像这样 gt gt gt import mymodule gt gt gt names dir mymodule 我如何获得对中定义的所有名称的引用mymodule从内部mymodule itself 像这样的东西
  • PHP cookie 有一个刷新延迟[重复]

    这个问题在这里已经有答案了 可能的重复 Cookie只在刷新时显示 我正在尝试设置一个基本的 PHP cookie 它会记住使用的颜色主题 然而 当我测试它时 颜色主题的设置和显示之间存在一次刷新滞后 澄清一下 我有一个选择表单 允许用户选
  • Swift 编译器挂起!这是一个错误吗?

    有一次 当我正在开发 Swift 项目时 Xcode 的状态栏中出现了 编译 Swift 源代码 消息 无论等多久 编译都没有完成 我回滚了最近的更改 很快意识到让编译器感到困惑的是一个非常简单的枚举结构 下面是一个说明该问题的 Playg
  • nodeJS将数据插入PostgreSQL错误

    我在使用 NodeJS 和 PostgreSQL 时遇到了一个奇怪的错误 我希望你能帮助我 我有大量的数据集 大约有 200 万个条目 我想将它们插入到数据库中 一份数据由 4 列组成 id string points float mid
  • plone 中的文件是否存在与修订版本一样多的副本?

    在 plone 中 如果文件 或任何内容 被修改 例如 4 次 则存在多少个物理副本 我正在使用 plone 4 1 其中文件和图像存储在文件系统上 内容对象由多个持久记录组成 对于文件系统上包含二进制 blob 文件的图像和文件 当内容对
  • 如何获取非公开成员的值

    如何在 C 中使用 OPCDA NET 获取 OPCGroup 的非公共成员的值 private void DataChangeHandler object sender DataChangeEventArgs e try object o
  • 当月剩余天数

    指定月份剩余天数 如何查找当月剩余天数 示例 如果当前月份是 11 月 今天的日期是 16 11 2016 一个月的天数 经过的天数 我想动态地做 在我的例子中 30 16 14 declare date date set date 16
  • Outlook 加载项 API 不会在 Firefox/Chrome 上持续触发 ItemChange 事件

    我们已在 Outlook 加载项的清单中启用任务窗格固定 并注意到除了 Windows Outlook 2016 客户端之外 现在 Outlook Office Online 中也提供固定支持 但是 那ItemChange切换邮件项目时 事
  • 无法在单个 UIViewController 中隐藏状态栏

    我想在单视图控制器中隐藏状态栏 但我的代码不起作用 我正在使用下面的代码 BOOL prefersStatusBarHidden return YES void viewWillApper BOOL animated UIApplicati
  • Undersore 的 _.now 如何工作?

    它看起来不像是用 JavaScript 编写的 如果你输入 now在控制台中 你只能得到 function now native code 通常只有当您尝试查看某些内部工作方式对浏览器不可见的内置方法时 您才会明白这一点 setTimeou
  • 查询保存为 npz 的 NumPy 数组的 NumPy 数组很慢

    我生成一个 npz 文件 如下所示 import numpy as np import os Generate npz file dataset text filepath test np load npz texts for text n
  • python 3中的函数注释出现“名称未定义”错误

    我正在尝试使用 python3 类型注释功能 这是一些没有注释的玩具函数 def fa func args return func args def fb x str return x returned fa fb Newton 这些工作正
  • 抑制 bash 中的警告输出

    mysql tzinfo to sql usr share zoneinfo mysql u root mysql 我尝试添加 2 gt dev null gt dev null 等 似乎没有什么可以抑制警告 mysql tzinfo to
  • 使用 PDO 插入数据库

    我正在尝试将数据插入服务器上的数据库中 要连接到我的数据库 我有以下代码 这一切都很好 我已将其包含在我的代码中 因此这不是问题 这是我将数据插入数据库的代码
  • 查找 Drawable 资源时出现 NotFoundException

    我从 android 开始 我想按照描述为单元格添加边框在这个答案中 所以我创建了 cell background xml 文件 Eclipse 在其中创建了该文件res drawable其中包含
  • 了解行内元素、垂直对齐、行框和行高

    vertical align bottom means the bottom inline box matches the bottom of its line box so in my case the inline box of spa
  • 使用 .save() 与 findByIdAndUpdate() 从数组中删除项目

    我在用 pull从 mongo db 中的数组中删除一条记录 它工作得很好 但是我在堆栈溢出的某个地方读到的一条评论 无法再次找到它来发布链接 让我很困扰 因为它评论说它不好用 save而不是使用 findByIdAndUpdate or
  • 为什么应该使用基类型声明方法参数?

    我声明了一个简单的方法来尝试将文本框的输入转换为 int 如下所示 int TryConvertTextToInt TextBox box do try catch 我的 IDE SharpDevelop 尝试给我一些重构建议 具体来说 b