C# 使用相同方法的自定义用户控件,以相同的方式调用它们

C# 使用相同方法的自定义用户控件,以相同的方式调用它们,c#,reflection,user-controls,C#,Reflection,User Controls,因此,我在我的项目中制作了一系列用户控件,这些控件集成到一个系统中,自动跟踪有关它们的某些内容。但我不确定如何在不让它看起来很难看的情况下完成某个部分 所有控件都是从不同的控件类型(面板、文本框、组合框等)扩展而来的,但有几种完全相同的方法 我想做的是避免这种情况: public void SendMyMessage(Control thisControl) { if(thisControl is myPanel) (thisControl as myPanel).SendMessage

因此,我在我的项目中制作了一系列用户控件,这些控件集成到一个系统中,自动跟踪有关它们的某些内容。但我不确定如何在不让它看起来很难看的情况下完成某个部分

所有控件都是从不同的控件类型(面板、文本框、组合框等)扩展而来的,但有几种完全相同的方法

我想做的是避免这种情况:

public void SendMyMessage(Control thisControl)
{
    if(thisControl is myPanel) (thisControl as myPanel).SendMessage();
    else if(thisControl is myComboBox) (thisControl as myComboBox).SendMessage();
    else if(thisControl is myTextbox) (thisControl as myTextbox).SendMessage();
    else if(thisControl is myLabel) (thisControl as myLabel).SendMessage();
}

我宁愿有一个更简单的方法,让我在一行中调用它。(注意,我正在调用的SendMessage()函数在不同的控件上执行不同的操作,但不需要参数,并且以相同的方式调用)

将消息放入接口,并让所有控件实现该接口


然后,您的方法可以直接使用该接口,并与任何控件一起工作。

我建议在所有控件中实现类似于
IMessageSender
接口的功能。因此,您只能有一张支票:

if (thisControl is IMessageSender)
  (thisControl as IMessageSender).SendMessage();
其中界面如下所示:

public interface IMessageSender
{
  void SendMessage();
}

你为什么同时使用“是”和“是”?我会做一次‘is’+‘cast’或者只做一次‘as’,然后检查null。因为这个优化与原始问题没有关系;)在我看来,一切都很混乱。我对他们一视同仁,一视同仁