我對c#很陌生,我正在練習多態。我想要做的是讓一個設備成爲三種類型之一(遊戲杆,鼠標或鍵盤)。我認爲最好的方法是使用一個類和虛擬。這裏的佈局有問題嗎?c中的多態覆蓋問題#
namespace HID
{
public class HIDControl
{
.
.
.
class agnosticDevice
{
private Joystick jDevice;
private Mouse jMouse;
private Keyboard jKeyboard;
public string type;
public virtual void device()// no way to return different types?
{
//if type is mouse return jMouse...ect?
}
}
.
.
.
}
}
只是不理解如何做到這一點,或者我可以走了。誰能幫忙?
更多信息,我在這裏使用DX,也許有這方面的規定,但我不知道如何。基本上在我的HIDControl類中,我設置了DX並根據用戶輸入創建了一個設備。此輸入可能稍後會更改,我需要更改我的設備。所有設備大部分使用相同的功能。事實上,所有事情都可以視爲遊戲杆。雖然對於某些高級功能,我需要改變類型。我知道我可以做類級別的多態,但如此多的類將是多餘的。
另一個直接的解決方案就是在我的班級製作3個設備,但如果我這樣做,我需要3個if語句用於每個用途,而這只是醜陋的。
我覺得我越來越接近這裏[更新代碼的意見和建議發表評論]但是當我創造我的設備它不是繼承成員的權利。以下是我迄今爲止
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);//defult
}
}
然後我做
AgnosticDevice device = (vJoystick)DeviceFactory.Create(type, directInput, deviceGuid);
但設備。(有些DX功能)不可用。
啊是的,我記得在C#中,THX使用這個詞。我會做一些研究。 –