gpt4 book ai didi

c# - 解决缺少枚举继承的问题

转载 作者:行者123 更新时间:2023-12-05 04:21:54 25 4
gpt4 key购买 nike

类 Phone 和 Computer 都实现了 IDevice 接口(interface)。

Phone 有一个 PhoneStatus 枚举属性,而 Computer 有一个 ComputerStatus 枚举属性。此外,它们都有一个方法可以根据它们的状态属性返回一些东西。

class Phone : IDevice
{
public string Name { get; set; }
public string Manufacturer { get; set; }
public PhoneStatus Status { get; set; }

IEnumerable<object> GetStuffByStatus(PhoneStatus status)
{
...
}
}

enum PhoneStatus
{
On,
Off
}

class Computer : IDevice
{
public string Name { get; set; }
public string Manufacturer { get; set; }
public ComputerStatus Status { get; set; }

IEnumerable<object> GetStuffByStatus(ComputerStatus status)
{
...
}
}

enum ComputerStatus
{
Started,
ShutDown,
Booting,
ShuttingDown
}

我知道继承不是枚举的选项,所以问题是:是否有任何方法可以强制实现 IDevice 的类编写它们自己的 DeviceStatus 属性(可以实现为 PhoneStatus 或 ComputerStatus)和 GetStuffByStatus 方法?像这样

interface IDevice
{
string Name { get; set; }
string Manufacturer { get; set;}
DeviceStatus Status { get; set;}

IEnumerable<object> GetStuffByStatus(DeviceStatus status);
}

最佳答案

你可以尝试这样的事情:

public interface IDevice<T> where T: Enum
{
string Name { get; set; }
string Manufacturer { get; set; }
T Status { get; set; }

IEnumerable<object> GetStuffByStatus(T status);
}

然后实现类必须为状态声明某种类型的枚举:

public class Computer: IDevice<ComputerStatus>
{
public string Name { get; set; }
public string Manufacturer { get; set; }
public ComputerStatus Status { get; set; }

public IEnumerable<object> GetStuffByStatus(ComputerStatus status)
{
throw new NotImplementedException();
}
}

如果需要,您可以将不依赖于 Status 枚举的公共(public)部分提取到基本接口(interface)中:

public interface IDevice
{
string Name { get; set; }
string Manufacturer { get; set; }
}

public interface IDeviceWithStatus<T>: IDevice where T: Enum
{
T Status { get; set; }
IEnumerable<object> GetStuffByStatus(T status);
}

然后您仍然可以通过 IDevice 访问公共(public)部分和状态相关的部分通过IDeviceWithStatus<T> .

关于c# - 解决缺少枚举继承的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74136434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com