我正在研究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
类一起创建并实现IMouse
或AgnosticDevice
接口,如果这样做会使您的生活更简单。