c# - 如何通过我的虚拟类(class)获得我的基础类(class)

标签 c# interface

我正在学习 C# 类接口(interface),但我陷入了困境。

这是我当前的界面。

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
    }
}

请理解我仍然在这里学习,但我认为这已经接近我想要的了。现在操纵杆、鼠标和键盘都是 Direct X 类。我想这样做,以便我可以在我的代码中拥有一个名为“device”的设备,而与它的类型无关。每一个类(class)都有相似的成员。因此,我不想创建 3 个类,而是真正想要一个类并为每种类型提供 3 个接口(interface)。

现在我当前的问题是如何构建它。通常,对于这些类中的任何一个,您都会执行简单的新操作,例如 操纵杆设备 = 新操纵杆 ( directInput, deviceGuid ); 但就我而言,我需要做一个 device = (vJoystick)DeviceFactory.Create( 类型, directInput, deviceGuid ); 但正如你所看到的,设备从未真正制造出来。 vJoystick 永远不会返回新的操纵杆。这就是我迷路的地方。

最佳答案

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

在您的情况下,您需要让您的类封装 Joystick 和 Mouse 类,这将允许您使用普通的工厂方法。然后,您可以创建并实现 IJoystickIMouse 接口(interface)以及您的 AgnosticDevice 类(如果这会让您的生活更简单的话)。

关于c# - 如何通过我的虚拟类(class)获得我的基础类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22153667/

相关文章:

c# - 无效的列名 *Id

c# - 是否可以找到 View 模型引用的属性

c# - "Class does not implement interface member"类实现通用接口(interface)时出错

java - java中这个有效的泛型方法如何?

c# - 不实现接口(interface)成员问题

c# - 如何解决 '...is a ' type', which is not valid in the given context'? (C#)

c# - 在c#中使用word为什么关闭时总是显示 'save as'对话框

c# - 返回非结构化 BsonDocument 作为 ApiController 中的类属性

java - 动态加载遵循接口(interface)的类

c# - 具有相同功能的 2 个接口(interface)上的最小起订量