2013-10-04 51 views
0

比方說,我有兩個接口, DeviceDeviceSettings, 然後我有類:如何將界面改爲基類?

class DevA : Device 
class DevASettings : DeviceSettings 
class DevB : Device 
class DevBSettings : DeviceSettings 
class DevC : Device 
class DevCSettings : DeviceSettings 

Device接口,有兩個函數:

DeviceSettings GetSettings(); 
void SetSettings(DeviceSettings setting); 

例如: DevA.GetSettings()可以得到來自DevASettings的設置

N我想將DeviceSettings從接口更改爲基類。 仍然想要使用例如DevA.GetSettings()可以從DevASetting獲得設置

那麼如何在Device: 例如:如何更改上面的兩個函數調用,以便Device可以從其DeviceSettings類中獲取設置。

+3

您列出'Device'功能,但沒有提及什麼'DeviceSettings'接口都有,但你問有關更改'DeviceSettings'接口轉換爲類。我很困惑。你能清理你的問題嗎? – Shaamaan

+1

使用接口的命名約定。對於例如'IDevice'接口,而不是'Device',它增加了可讀性 – CarbineCoder

回答

2

其實我做Device爲一個抽象類:

public abstract class Device 
{ 
    DeviceSettings deviceSettings; 

    DeviceSettings GetSettings() 
    { 
     return this.deviceSettings; 
    } 

    void SetSettings(DeviceSettings setting) 
    { 
     this.deviceSettings = setting; 
    } 
} 

public class DevA : Device 
{ 
    public DevA() 
    { 
     this.deviceSettings = new DevASettings(); 
    } 

    //Do what you need with deviceSettings here 
} 

//Repeat for DevB/DevBSettings and DevC/DevCSettings 
3

您可以作出這樣

interface Device<T> where T:DeviceSettings 
{ 
T GetDevice(); 
void SerDevice(T settings); 
} 

class DeviceA:Device<DeviceASettings> 
{ 
    public DeviceASettings GetDevice() 
    { 
     throw new NotImplementedException(); 
    } 

    public void SerDevice(DeviceASettings settings) 
    { 
     throw new NotImplementedException(); 
    } 
} 
0

改變的財產實施。我沒有看到基類的問題,或者用派生類替換它。根據您的需要更改它。

interface IDevice 
{ 
    DeviceSettingsBase DeviceSetting { get; set; } 
} 

class DeviceSettingsBase 
{ 
    public virtual void DeviceSettingsName() 
    { 
     Console.WriteLine("DeviceSettingsBase"); 
    } 
} 
class DevA : IDevice 
{ 
    public DeviceSettingsBase DeviceSetting { get; set; } 
} 

class DevASettings : DeviceSettingsBase 
{ 
    public override void DeviceSettingsName() 
    { 
     Console.WriteLine("DevASettings"); 
    } 
} 

class DevBSettings : DeviceSettingsBase 
{ 
    public override void DeviceSettingsName() 
    { 
     Console.WriteLine("DevBSettings"); 
    } 
} 

public static class Example 
{ 
    public static void Main() 
    { 
     DevA devA = new DevA(); 
     devA.DeviceSetting = new DevASettings(); 
     devA.DeviceSetting.DeviceSettingsName(); 
     devA.DeviceSetting = new DevBSettings(); 
     devA.DeviceSetting.DeviceSettingsName(); 
     devA.DeviceSetting = new DeviceSettingsBase(); 
     devA.DeviceSetting.DeviceSettingsName(); 
    } 
} 

輸出

DevASettings 
DevBSettings 
DeviceSettingsBase 
相關問題