c# - 使用 GetType().Name 在事件处理程序中转换发件人对象

标签 c# late-binding

我有一个文本框和 RichTextBox 的事件处理程序。 代码是一样的,但是

在处理程序 #1 中我这样做:

RichTextBox tb = (RichTextBox)sender

相应地在处理程序 #2 中:

TextBox tb = (TextBox)sender

这样我就可以完全操纵发送控件了。 如何根据其类型将发送对象转换为 TextboxRichTextbox

sender.GetType().Name

然后在运行时创建控件并使用它?这样我只需要一个事件处理函数:更少的代码,更少的错误,更容易维护和 DRY :-)

最佳答案

您永远不必转换。我刚开始的时候也是这样想的,这个“模式”是不正确的,而且不合逻辑。

你最好的选择是使用类似的东西:

if (sender is TextBox)
{
  TextBox tb = (TextBox)sender;
}
else if (sender is RichTextBox)
{
  RichTextBox rtb = (RichTextBox)sender;
}
else
{
  // etc
}

关于c# - 使用 GetType().Name 在事件处理程序中转换发件人对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/634112/

相关文章:

oop - 猴子修补/类重新开放真的是反射的例子吗?

c# - 如何验证从一个应用程序在另一个应用程序中生成的 JWT token ?

c++ - 后期绑定(bind)到具有 "extern"定义变量的库

c# - 如何填充由 Activator.CreateInstance() 方法创建的实例

vba - 我可以在通过早期绑定(bind)使用库之前使用后期绑定(bind)来检查库的存在吗?

C++ Virtual 关键字作为一种避免包含代码单元的方法

c# - 加载文件夹中的所有 Texture2D

c# - 如何在多个 c# 项目中实现相同的 nuget 包版本?

c# - 在 Visual Studio 中创建属性的快捷方式?

c# - 将字段放入下一个空数组索引