Oop 我可以在键码的切换类型中使用多态性吗

Oop 我可以在键码的切换类型中使用多态性吗,oop,if-statement,polymorphism,keycode,Oop,If Statement,Polymorphism,Keycode,我读到了反If运动。他们中的大多数人说使用多态性来代替条件 那么,在切换KeyDown事件(WinForms)中KeyEventArgs中的KeyCode之类的类型时,是否应该始终使用多态性 我总是使用这种代码 If e.KeyCode = Keys.F1 Then 'Do F1 things ElseIf e.KeyCode = Keys.F2 Then 'Do F2 things End If 坏吗?如果是(哦,另一个如果),你能给我一个多态方法的

我读到了反If运动。他们中的大多数人说使用多态性来代替条件

那么,在切换KeyDown事件(WinForms)中KeyEventArgs中的KeyCode之类的类型时,是否应该始终使用多态性

我总是使用这种代码

   If e.KeyCode = Keys.F1 Then
      'Do F1 things
   ElseIf e.KeyCode = Keys.F2 Then
      'Do F2 things
   End If

坏吗?如果是(哦,另一个如果),你能给我一个多态方法的示例吗?

根据你使用的语言和你的特定用例,你可以创建一个映射,其中键是你的键代码,值是函数指针,以及需要执行的操作


更好的是,您可以再进行一级间接寻址,其中您的值是某种动作对象,每个动作对象都知道如何执行。这样,您就可以在许多不同的上下文中重用代码来触发相同类型的功能。

我理解。但是每个键码到动作对象的初始映射需要条件权限?Case Keys.F1:Map.Add(Keys.F1,ActionObject)。我在想是否有一种方法我不能做条件句你不需要条件句。当您初始化映射时,假设您有一个名为Construct()的函数,该函数在您的应用程序/窗口/任何启动时调用:Construct(){map.Add(Keys.F1,new HelpAction());map.Add(Keys.Q,new QuitAction());}抱歉,我忘了提到,我被绑定到了我们的表,在那里我得到了类似“QuitAction”的函数名连同它的许可。因此,在构造函数中,我需要首先查询表,然后进行映射。