我正在研究C#类接口,但遇到了麻烦。

这是我当前的界面。

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 ); //default
    }
}


请理解我还在这里学习,但是我认为这已经接近我想要的了。现在,操纵杆,鼠标和键盘是Dirrect X类。我想这样做,以便在我的代码中拥有一个称为“ device”的设备,而与它的类型无关。每个分类的成员都有相似的成员。因此,我确实不希望创建3个类,而是想要一个类并为每种类型提供3个接口。

现在我当前的问题是如何构造它。通常,使用这些类中的任何一个,您都可以像
游戏杆设备=新的游戏杆(directInput,deviceGuid);
但就我而言,我需要做一个
设备=(vJoystick)DeviceFactory.Create(类型,directInput,deviceGuid);
但正如您可以清楚地看到的那样,设备并不是真正制造出来的。 vJoystick永远不会返回新的Joystick。这是我迷路了。

最佳答案

C#不支持多重继承,因此您不能从多个类派生。

在您的情况下,您需要将类封装为Joystick和Mouse类,这将允许您使用常规的工厂方法。然后,您可以与IJoystick类一起创建并实现IMouseAgnosticDevice接口,如果这样做会使您的生活更简单。

09-07 01:09