【问题标题】:Custom user controls with the same method, calling them the same way自定义用户控件,方法相同,调用方式相同
【发布时间】:2011-12-17 09:58:03
【问题描述】:

所以我在我的项目中制作了一堆用户控件,它们集成到一个自动跟踪有关它们的某些事情的系统中。但我不确定如何做某个部分而不让它看起来真的很丑。

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

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

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();
}

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

【问题讨论】:

    标签: c# reflection user-controls


    【解决方案1】:

    我建议在所有控件中实现类似IMessageSender 的接口。所以你只能有一张支票:

    if (thisControl is IMessageSender)
      (thisControl as IMessageSender).SendMessage();
    

    界面如下所示:

    public interface IMessageSender
    {
      void SendMessage();
    }
    

    【讨论】:

    • 你为什么同时使用'is'和'as'?我会做 'is' + 'cast' 或只做 'as' 一次,然后检查 null。
    • 因为这个优化与原来的问题没有关系;)
    • 在我看来,所有的方式都很混乱。我同样讨厌他们所有人,并以原样解决
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 2013-08-30
      • 2011-11-11
      • 2022-11-09
      相关资源
      最近更新 更多