gpt4 book ai didi

c# - 枚举和继承

转载 作者:行者123 更新时间:2023-11-30 05:13:17 28 4
gpt4 key购买 nike

我将(再次)使用以下类层次结构:

Event

并且以下所有类都继承自 Event:

SportEventType1 SportEventType2 SportEventType3 SportEventType4

我最初设计的Event类是这样的:

public abstract class Event
{
public abstract EventType EventType { get; }
public DateTime Time { get; protected set; }

protected Event(DateTime time) {
Time = time;
}
}

EventType 定义为:

public enum EventType {
Sport1,
Sport2,
Sport3,
Sport4
}

最初的想法是每个 SportEventTypeX 类都会设置其正确的 EventType。现在想起来,我认为这种做法是完全错误的,原因如下:

  1. 如果我想稍后添加新的SportEventType 类我必须修改枚举
  2. 如果我稍后决定删除一个我觉得我不会的 SportEventType使用我也遇到了大麻烦枚举。
  3. 我在事件中有一个类变量毕竟,这使得关于该类型的假设将从它继承的类,这有点违背了目的继承。

遇到这种情况你会怎么解决?在事件类中定义一个抽象的“描述”属性,让每个子类实现它?让属性(Java 中的注释!)设置其描述变量?在这种情况下,使用类变量而不是属性/注释有什么优点/缺点?还有其他更优雅的解决方案吗?

谢谢

最佳答案

如果您的子类将是 EventType,我不会为 EventType 进行枚举。枚举适用于一组固定的选项 - 在您的情况下,您需要继承的灵 active ,因此只需直接使用子类化即可。

如果这只是一个描述问题,我会这样做:

public abstract class Event
{
public string Description { get; private set;}
public DateTime Time { get; protected set; }

protected Event(string description, DateTime time) {
this.Description = description;
Time = time;
}
}

这只是让您的子类为您指定这一点,而且听起来这就是您所追求的。

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

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