gpt4 book ai didi

c# - 我应该何时以及如何使用枚举类而不是枚举?

转载 作者:太空狗 更新时间:2023-10-29 17:52:07 26 4
gpt4 key购买 nike

工作中的一位开发人员最近开始在通常适合枚举的地方使用类模式而不是枚举。相反,他使用了类似于下面的东西:

internal class Suit
{
public static readonly Suit Hearts = new Suit();
public static readonly Suit Diamonds = new Suit();
public static readonly Suit Spades = new Suit();
public static readonly Suit Clubs = new Suit();
public static readonly Suit Joker = new Suit();
private static Suit()
{

}
public static bool IsMatch(Suit lhs, Suit rhs)
{
return lhs.Equals(rhs) || (lhs.Equals(Joker) || rhs.Equals(Joker));
}
}

他的理由是它在无形中看起来像一个枚举,但允许他将与枚举相关的方法(如上面的 IsMatch)包含在枚举本身中。

他将其称为 Enumeration 类,但我以前从未见过。我想知道优点和缺点是什么以及在哪里可以找到更多信息?

谢谢

编辑:他描述的另一个优势是能够为枚举添加特定的 ToString() 实现。

最佳答案

枚举在很多情况下都很好,但在其他情况下却很差。通常我会发现一些问题使用枚举:

  • 与枚举相关的行为分散在应用程序中
  • 新的枚举值需要猎枪手术
  • 枚举不遵循开闭原则

由于枚举行为分散在各处,我们永远无法将其带回源类型,因为枚举类型不能有任何行为(或状态)。

另一方面,枚举类:

每个枚举类型的所有变体不仅可以下推到枚举类,还可以下推到每个特定的子类型。

枚举在各种情况下都能很好地工作,但在您的领域模型中可能会很快崩溃。枚举类提供了大部分相同的可用性,并具有成为行为目的地的额外好处。

不再需要 Switch 语句,因为我可以将可变性和知识推回到它所属的位置,回到模型内部。如果出于某种原因我需要检查特定的枚举类值,该选项仍然对我开放。这种模式不应该取代所有枚举,但有一个替代方案很好。

可以阅读here

关于c# - 我应该何时以及如何使用枚举类而不是枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16507323/

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