【问题标题】:C# Public Enums in Classes类中的 C# 公共枚举
【发布时间】:2010-03-29 19:56:09
【问题描述】:

我有一个包含公共枚举的类的程序,如下所示:

public class Card
{
    public enum card_suits
    {
        Clubs,
        Hearts,
        Spades,
        Diamonds
    }
...

我想在我的项目的其他地方使用它,但如果不使用 Card.card_suit 就无法做到这一点。有谁知道 C# 中是否有办法声明这个以便我能够声明

card_suits suit;

不引用它所在的类?

【问题讨论】:

  • 很快,在 C# 6 中,静态 using 语句就会实现,因此您不必像这样引用类。但是,今天不在 C# 中。

标签: c# enums


【解决方案1】:

目前,您的 enum 嵌套在您的 Card 类中。您所要做的就是将enum 的定义移出类:

// A better name which follows conventions instead of card_suits is
public enum CardSuit
{
    Clubs,
    Hearts,
    Spades,
    Diamonds
}

public class Card
{
}

指定:

建议将名称从 card_suits 更改为 CardSuit,因为 Microsoft 指南建议使用 Pascal Case for Enumerations 并且单数形式在这种情况下更具描述性(因为复数表示您通过 ORing 存储多个枚举值他们在一起)。

【讨论】:

  • 但我只想在一个地方声明它,但在整个命名空间中使用它
  • 您仍然可以在整个命名空间中访问它,只需声明一次。
  • @pm_2 跟随贾斯汀的回答将允许你做到这一点。
  • 其他人提到 CardSuit 比 CardSuit 更受欢迎,但没有解释原因。复数形式意味着它将是一个可以被 ORed 在一起的标志的枚举。
【解决方案2】:

你需要在类之外定义枚举。

public enum card_suits
{
    Clubs,
    Hearts,
    Spades,
    Diamonds
}

public class Card
{
     // ...

话虽如此,您可能还想考虑使用 standard naming guidelines for Enums,它是 CardSuit 而不是 card_suits,因为建议使用 Pascal Casing,并且枚举没有用 FlagsAttribute 标记,这表明多个值是合适的在单个变量中。

【讨论】:

    【解决方案3】:

    只需在类范围之外声明枚举。像这样:

    public enum card_suits
    {
        Clubs,
        Hearts,
        Spades,
        Diamonds
    }
    
    public class Card
    {
        ...
    }
    

    请记住,枚举是一种类型。如果要被其他类使用,您也可以考虑将枚举放在自己的文件中。 (您正在编写纸牌游戏,而花色是纸牌的一个非常重要的属性,在结构良好的代码中,它需要被许多类访问。)

    【讨论】:

    • 只要是public OP 应该没有问题,但就组织和结构而言,我绝对同意你的看法。
    【解决方案4】:

    只需在类定义之外声明即可。

    如果您的命名空间的名称是 X,您将能够通过 X.card_suit 访问枚举的值

    如果你没有为这个枚举定义命名空间,只需通过 card_suit.Clubs 等调用它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多