C#和C中的enum关键字有什么区别?

时间:2013-10-09 09:24:35

标签: c# c enums

我可以知道C#和C中的enum关键字之间的区别是什么?

我尝试在C#中使用c风格的enum变量,但是我收到了错误。当我搜索谷歌它说,如果我们有枚举天{星期六,星期日,星期一,星期二,星期三,星期四,星期五};那么我们需要在C#中使用Days.Sat而不是像C中那样直接使用Sat。为什么会这样?

4 个答案:

答案 0 :(得分:5)

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

  • 对读者来说,Sat是否意味着“一周中的哪一天”显而易见?为什么不是“身体姿势”?还是“招生考试”?
  • 当多个枚举在不同的上下文中声明相同的名称时,会发生什么情况,可能会有不同的值?
  • 它还可以提供更好的IDE工具支持 - 只显示相应的选项

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

答案 1 :(得分:3)

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

enum class Day
{
    Mon,
    Tue,
};

Day myDay = Day::Mon;

答案 2 :(得分:1)

在C#中,枚举和属性是该语言的第一类成员,完全由底层引擎支持,事件和委托(类型安全函数指针)也是如此。 在C#中,枚举像一个类一样有一些例外,这意味着它可以在命名空间或类级别声明;它不能在C ++中的方法中的语句块中定义。如果你尝试,Visual Studio会发出一个错误而不是关于枚举定义本身,而是在方法的开头括号中,声明'} expected'而不是像'enum那样有用的东西不能在语句级别定义'或者甚至是'invalid statement ”。另一个不直观的错误消息是由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

我希望这能帮助你理解这些差异。还有很多其他小事我以后会对你说的!

答案 3 :(得分:1)

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

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

请浏览此链接,

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

相关问题