2013-10-09 61 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