C# 如何将接口更改为基类?

C# 如何将接口更改为基类?,c#,class,interface,C#,Class,Interface,假设我有两个接口, 设备和设备设置, 然后我上课: class DevA : Device class DevASettings : DeviceSettings class DevB : Device class DevBSettings : DeviceSettings class DevC : Device class DevCSettings : DeviceSettings 在设备界面中,有两个函数被称为: DeviceSettings GetSettings(); void S

假设我有两个接口,
设备
设备设置
, 然后我上课:

class DevA : Device
class DevASettings : DeviceSettings
class DevB  : Device
class DevBSettings : DeviceSettings
class DevC  : Device
class DevCSettings : DeviceSettings
设备
界面中,有两个函数被称为:

DeviceSettings GetSettings();
void SetSettings( DeviceSettings setting);
例如:
DevA.GetSettings()
可以从
DevASettings

现在我想将
DeviceSettings
从接口更改为基类。 并且仍然要使用例如
DevA.GetSettings()
可以从
DevASetting

那么如何在
设备中进行更改

e、 g.如何更改以上两个函数调用,以便
Device
可以从其
DeviceSettings
类中获取设置。

您可以使设备界面如下所示

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();
    }
}
接口设备,其中T:设备设置
{
T GetDevice();
无效SERT装置(设置);
}
DeviceA类:设备
{
公共设备设置GetDevice()
{
抛出新的NotImplementedException();
}
公用设备(设备设置)
{
抛出新的NotImplementedException();
}
}

您可以这样制作设备界面

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();
    }
}
接口设备,其中T:设备设置
{
T GetDevice();
无效SERT装置(设置);
}
DeviceA类:设备
{
公共设备设置GetDevice()
{
抛出新的NotImplementedException();
}
公用设备(设备设置)
{
抛出新的NotImplementedException();
}
}

使设备设置成为一个抽象类

使设备设置成为一个抽象类

我实际上会将
设备
变成一个抽象类:

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 

实际上,我会将
设备
制作成一个抽象类:

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 

使用属性更改了实现。我认为基类或用其派生类替换基类没有问题。根据需要更换

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

使用属性更改了实现。我认为基类或用其派生类替换基类没有问题。根据需要更换

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

您列出了
设备
功能,但没有提到
设备设置
接口有哪些功能,但您要求将
设备设置
接口更改为类。我很困惑。你能澄清你的问题吗?使用接口的命名约定。例如,对于
IDevice
接口,而不仅仅是
Device
它增加了您列出的
Device
函数的可读性,但是没有提到
DeviceSettings
接口有什么,但是您要求将
DeviceSettings
接口更改为类。我很困惑。你能澄清你的问题吗?使用接口的命名约定。例如,
IDevice
接口而不仅仅是
设备
增加了可读性