2013-10-09 63 views
0

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

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

+1

http://en.wikipedia.org/wiki/Enumerated_type#C.23阅读 – wudzik

回答

3

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

enum class Day 
{ 
    Mon, 
    Tue, 
}; 

Day myDay = Day::Mon; 
4

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

  • 给读者,是很明显的是Sat意味着“一周中的一天”?为什么不是“身体位置”?或“招生考试”?
  • 多个枚举在不同的上下文中声明相同的名称时会发生什么,可能会有不同的值?
  • 这也使得更好的IDE工具支持 - 只显示相应的选项

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

1

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

我希望这将有助于你理解的差异。很多其他的小东西我会在晚些时候给你的!

1

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

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

请到通过这个环节,

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