【问题标题】:how to get my base class through my virtual class如何通过我的虚拟类获取我的基类
【发布时间】:2014-03-04 01:58:52
【问题描述】:

我正在研究 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
    }
}

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

现在我目前的问题是如何构建它。通常使用这些类中的任何一个,您都会做一个简单的新类 操纵杆设备 = 新操纵杆 (directInput, deviceGuid); 但就我而言,我需要做一个 device = (vJoystick)DeviceFactory.Create(type, directInput, deviceGuid); 但正如您可以清楚地看到的那样,设备从未真正制造出来。 vJoystick 从不返回新的操纵杆。这是我迷路了。

【问题讨论】:

    标签: c# interface


    【解决方案1】:

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

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

    【讨论】:

    • C# 确实支持多个接口,这在很多情况下已经足够了。
    • @Nate 是的 - 我编辑包括在内,但在这种情况下,OP 正在尝试将第三方 (DirectX) 类与他们自己的类一起子类化。
    • 我听从了您的建议,但无法完全正确地使用语法。我进行了研究,但很难找到使用 3rd 方类的示例。任何人都可以给出一个代码示例来帮助我了解语法吗?
    • @SeanGreen 有关 C# 中的许多封装示例,请参阅:stackoverflow.com/a/7445676/65358
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    相关资源
    最近更新 更多