enum
我可以知道C# 和 C 中的关键字有什么区别吗?
我试图enum
在 C# 中使用 c 风格的变量,但我得到了错误。当我搜索谷歌时,它说,如果我们有枚举天数 {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 那么我们需要在 C# 中使用 Days.Sat 而不是像在 C 中那样直接使用 Sat。为什么会这样?
简单地说:因为这是指定两种不同语言的方式。在 C 中,名称的范围在声明级别,而在 C# 中,名称从属于枚举类型。后一种方法有助于避免歧义和冲突:
Sat
意味着“星期几”?为什么不是“体位”?还是“入学考试”?但是“为什么会这样?” 很简单:因为这是每种语言的设计方式。
因为 C# 的设计者认为最好将枚举值包含在自己的“命名空间”中,而不是将它们全部放入父命名空间中。很多人认为这是 C/C++ 中的一个烦恼。
顺便说一句,在 C++11 中现在有“强类型枚举”,其语法与 C# 非常相似:
enum class Day
{
Mon,
Tue,
};
Day myDay = Day::Mon;
在 C 和 C++ 中,枚举定义了表示一组受限值的值类型。枚举类型几乎可以在使用之前在任何地方声明,包括语句块。
在 C# 中,枚举定义了一个类(即类型是类),这意味着它只能在命名空间或类级别声明;它不能像在 C++ 中那样在方法内的语句块中定义。
请通过此链接,
http://cplus.about.com/od/introductiontoprogramming/p/enumeration.htm
在 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
我希望这将帮助您了解差异。很多其他的小事我稍后会告诉你!