C#类中的公共枚举

78

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

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

我想在我的项目中的其他地方使用它,但是如果不使用Card.card_suit就无法实现。 有没有人知道在C#中是否有一种声明方式,以便我能够声明

card_suits suit;

不引用它所在的类吗?


6
很快,在C# 6中,静态using语句将使得您不需要像这样引用类。但是,现在的C#还没有这个功能。 - Jerry Nixon
4个回答

143

目前,你的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的命名建议是基于微软指南建议对枚举类型使用帕斯卡命名法,并且在此情况下,单数形式更具描述性(因为复数形式会暗示您正在通过按位OR运算存储多个枚举值)。


但我只想在一个地方声明它,然后在整个命名空间中使用它。 - Paul Michaels
5
只需声明一次,您仍可在整个命名空间中访问它。 - Justin Niessner
@pm_2 跟随 Justin 的回答可以让您完全做到这一点。 - Rowland Shaw
11
其他人提到了为什么CardSuit比CardSuits更受欢迎,但没有解释原因。复数形式意味着它将是一个可以进行按位OR操作的标志枚举。 - Martin Smith

26

你需要在类的外部定义枚举。

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

public class Card
{
     // ...

话虽如此,你可能还想考虑使用 枚举的标准命名指南,即 CardSuit 而不是 card_suits,因为建议使用帕斯卡命名法,并且该枚举没有标记 FlagsAttribute,这意味着单个变量中适合多个值。


11

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

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

public class Card
{
    ...
}

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


只要是“public”,OP就不应该有问题,但是在组织和结构上,我完全同意你的观点。 - Si8

3

将其声明在类定义之外即可。

如果您的命名空间名称为X,则可以通过X.card_suit访问枚举的值。

如果您没有为此枚举定义命名空间,只需使用card_suit.Clubs等进行调用即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接