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。因为这个优化与原始问题没有关系;)在我看来,一切都很混乱。我对他们一视同仁,一视同仁