作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究 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
}
}
请理解我仍在学习,但我认为这接近我想要的。现在 Joystick、Mouse 和 Keyboard 是 Dirrect X 类。我想这样做,以便我可以在我的代码中拥有一个名为“设备”的设备,该设备与它的类型无关。这些类别中的每一个都有相似的成员。因此,我不想创建 3 个类,而是真正想要一个类,并且每种类型有 3 个接口(interface)。
现在我现在的问题是如何构造它。通常对于这些类中的任何一个,你都会做一个简单的 new like操纵杆设备 = 新操纵杆 (directInput, deviceGuid);但就我而言,我需要做一个device = (vJoystick)DeviceFactory.Create( type, directInput, deviceGuid );但正如您可以清楚地看到的那样,设备从未真正被制造出来。 vJoystick 永远不会返回新的 Joystick。这是我迷路了。
最佳答案
C# 不支持多重继承,因此您不能从多个类派生。
在您的情况下,您需要让您的类封装 Joystick 和 Mouse 类,这将允许您使用普通的工厂方法。然后,您可以创建并实现一个 IJoystick
或 IMouse
接口(interface)以及您的 AgnosticDevice
类,如果这会让您的生活更简单的话。
关于c# - 如何通过我的虚拟类获得我的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22153667/
我是一名优秀的程序员,十分优秀!