C# 如何通过虚拟类获取基类

C# 如何通过虚拟类获取基类,c#,interface,C#,Interface,我正在学习C#类接口,我被卡住了 这是我目前的界面 public abstract class AgnosticDevice { public abstract void SomeDeviceOperation(); } public class vJoystick : AgnosticDevice, Joystick { public vJoystick( DirectInput di, Guid g){} public override void SomeDevic

我正在学习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类。我想让我的代码中有一个称为“设备”的设备,而不知道它是什么类型。每个被分类的人都有相似的成员。因此,我不需要制作3个类,而是想要一个类,每种类型有3个接口

现在我的问题是如何构建它。通常,对于这些类中的任何一个,您都可以执行一个简单的新操作,如 操纵杆设备=新操纵杆(directInput,deviceGuid); 但就我而言,我需要做一个 device=(vRogage)DeviceFactory.Create(类型、directInput、deviceGuid); 但正如你们可以清楚地看到的那个样,这个设备从来并没有真正制造出来过。Vmogage从不返回新的操纵杆。这就是我丢失的原因。

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


在您的情况下,您需要让您的类封装操纵杆和鼠标类,这将允许您使用正常的工厂方法。然后,您可以创建并实现一个
IJoystick
IMouse
接口以及您的
AgnosticDevice
类,如果这能让您的生活更简单的话。

C确实支持多个接口,这在很多情况下已经足够好了。@Nate是的-我编辑了它,但在这种情况下,OP试图将一个第三方(DirectX)类与它们自己的类一起子类化。我听从了你的建议,但语法不太正确。我做了研究,但是找到一个使用第三方类的例子并不容易。有谁能给出一个代码示例来帮助我理解语法吗?@SeanGreen有关C#中封装的许多示例,请参阅: