gpt4 book ai didi

c# - C# 中多态覆盖的问题

转载 作者:行者123 更新时间:2023-12-02 21:32:09 26 4
gpt4 key购买 nike

我对 C# 很陌生,正在练习多态性。我想要做的是让设备成为 3 类类型之一(操纵杆、鼠标或键盘)。我认为最好的方法是使用类和虚拟。这里的布局有问题吗?

namespace HID
{
public class HIDControl
{
.
.
.
class agnosticDevice
{
private Joystick jDevice;
private Mouse jMouse;
private Keyboard jKeyboard;
public string type;

public virtual void device()// no way to return different types?
{
//if type is mouse return jMouse...ect?
}
}
.
.
.
}
}

只是不明白如何正确地做到这一点,或者也许我离得很远。有人可以帮忙吗?

更多信息,我在这里使用 DX,也许有这方面的规定,但我不知道如何实现。基本上,在我的 HIDControl 类中,我设置了 DX 并根据用户输入创建了一个设备。此输入稍后可能会更改,我需要更改我的设备。所有设备大部分都使用相同的功能。事实上,一切都可以被视为操纵杆。尽管对于某些高级功能我需要更改类型。我知道我可以进行类级别的多态性,但很多类都是多余的。

另一个直接的解决方案是在我的类(class)中制作 3 个设备,但如果我这样做,每次使用都需要 3 个 if 语句,这太难看了。

[更新了评论和建议的代码]

我想我已经很接近了,但是当我创建我的设备时,它没有继承正确的成员。这是我到目前为止所拥有的

public abstract class AgnosticDevice
{
public abstract void SomeDeviceOperation();
}

public class vJoystick : AgnosticDevice, Joystick
{
public vJoystick( DirectInput di, Guid g){}
public override void SomeDeviceOperation()
{
/* Joystick operation */
}
}

public class vMouse : AgnosticDevice, Mouse
{
public vMouse( DirectInput di ){}
public override void SomeDeviceOperation()
{
/* Mouse operation */
}
}

public class vKeyboard : AgnosticDevice, Keyboard
{
public vKeyboard( DirectInput di , Guid g){}
public override void SomeDeviceOperation()
{
/* Keyboard operation */
}
}

public class DeviceFactory
{
public static AgnosticDevice Create( string type, DirectInput di, Guid g )
{
if ( type == "Mouse" )
{
return new vMouse( di);
}
if ( type == "Joystick" )
{
return new vJoystick( di, g);
}
if ( type == "Keyboard" )
{
return new vKeyboard( di, g);
}
return new vJoystick( di, g );//defult
}
}

那我就做

AgnosticDevice device = (vJoystick)DeviceFactory.Create( type, directInput, deviceGuid );

但是设备(某些DX功能)不可用。

最佳答案

这里你需要的是一个界面。定义这些不同输入设备之间的通用功能的东西。然后,您可以让每个类实现该接口(interface),以按照它们需要的任何特定方式执行这些各种操作。

关于c# - C# 中多态覆盖的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22102549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com