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
接口而不仅仅是设备
增加了可读性