0

enum我可以知道C# 和 C 中的关键字有什么区别吗?

我试图enum在 C# 中使用 c 风格的变量,但我得到了错误。当我搜索谷歌时,它说,如果我们有枚举天数 {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 那么我们需要在 C# 中使用 Days.Sat 而不是像在 C 中那样直接使用 Sat。为什么会这样?

4

4 回答 4

6

简单地说:因为这是指定两种不同语言的方式。在 C 中,名称的范围在声明级别,而在 C# 中,名称从属于枚举类型。后一种方法有助于避免歧义和冲突:

  • 对读者来说,这是否Sat意味着“星期几”?为什么不是“体位”?还是“入学考试”?
  • 当多个枚举在不同的上下文中声明相同的名称时会发生什么,可能具有不同的值?
  • 它还提供了更好的 IDE 工具支持 - 仅显示适当的选项

但是“为什么会这样?” 很简单:因为这是每种语言的设计方式

于 2013-10-09T09:41:29.910 回答
4

因为 C# 的设计者认为最好将枚举值包含在自己的“命名空间”中,而不是将它们全部放入父命名空间中。很多人认为这是 C/C++ 中的一个烦恼。
顺便说一句,在 C++11 中现在有“强类型枚举”,其语法与 C# 非常相似:

enum class Day
{
    Mon,
    Tue,
};

Day myDay = Day::Mon;
于 2013-10-09T09:50:47.663 回答
1

在 C 和 C++ 中,枚举定义了表示一组受限值的值类型。枚举类型几乎可以在使用之前在任何地方声明,包括语句块。

在 C# 中,枚举定义了一个类(即类型是类),这意味着它只能在命名空间或类级别声明;它不能像在 C++ 中那样在方法内的语句块中定义。

请通过此链接,

http://cplus.about.com/od/introductiontoprogramming/p/enumeration.htm

于 2013-10-09T10:46:11.473 回答
1

在 C# 中,枚举和属性是语言的一等成员,由底层引擎完全支持,事件和委托(类型安全函数指针)也是如此。在 C# 中,枚举像类一样交易,但有一些例外,这意味着它可以在命名空间或类级别声明;它不能像在 C++ 中那样在方法内的语句块中定义。如果您尝试,Visual Studio 会发出一个错误,而不是关于枚举定义本身,而是在方法的左大括号中,说明“} 预期”而不是“无法在语句级别定义枚举”甚至“无效语句”之类的有用信息'。另一个由 Microsoft 提供给您的不直观的错误消息。

我从以下链接中获得了这些信息:

http://suncat-csharp.blogspot.de/2010/11/differences-between-enum-in-c-and-cc.html

http://channel9.msdn.com/Forums/TechOff/446478-Enum-C-vs-C

我希望这将帮助您了解差异。很多其他的小事我稍后会告诉你!

于 2013-10-09T09:43:25.700 回答