2009-09-14 127 views

回答

4

做類似的事情的唯一方法是使用擴展方法,這可以使它看起來好像枚舉具有成員方法。

除此之外,您可以爲您的枚舉創建一個伴隨結構類型,該枚舉具有枚舉值的屬性,然後添加其他屬性和方法以支持該值。

0

不是直接的,但你可以使用擴展方法來提供類似的功能

0

這在C#中是不可能的。枚舉只能有名稱/值成員。

0

據我所知,沒有你不能在C#中。雖然你爲什麼也想要?似乎有點奇怪的東西附加變量和功能呢!

+2

你想要它做的正確的面向對象編程 - 涉及與枚舉本身的枚舉,而不是所有的地方開關條款放行爲。 – 2009-09-14 15:12:55

+0

,因爲我在java中做了很多。它實際上是我最喜歡的功能之一;)例如,你有一個枚舉高度,並且在每一箇中你都有一個包含實際高度的額外最終成員。 SMALL.height = 80,NORMAL.height = 100,BIG.height = 120 – clamp 2009-09-14 15:12:55

+0

我想這取決於你希望你的枚舉做什麼,但我不能想象我的需要做到這一點。至於OO,通常我有一個包裝enum的類來提供我需要的任何OO主題。 – Siyfion 2009-09-14 17:53:23

1

不是。在Java中,枚舉是一個類,而在C#中,枚舉只是包裝原始類型的語法糖。

0

您可以爲枚舉類型定義擴展方法,但不能將狀態添加到枚舉,因爲枚舉在內部表示爲簡單整數類型,並且無處可存儲狀態。

1

枚舉是強類型的常量。它們本質上是獨特的類型,允許您將符號名稱分配給整數值。在C#傳統中,它們是強類型的,這意味着即使其成員的基礎值相同,一種類型的枚舉也可能不會隱式分配給另一種類型的枚舉。沿着相同的路線,整數類型和枚舉不是可以互換的。不同的枚舉類型和整型類型之間的所有賦值都需要明確的轉換。

您不能在枚舉中使用成員變量或構造函數。也許你正在尋找的是一個結構。

結構類型是一種值類型,可以包含構造函數,常量,字段,方法,屬性,索引器,運算符,事件和嵌套類型。 struct的聲明採用以下格式:

1

你可以模仿的Java類型安全枚舉模式(在Java中什麼是如此普遍,之前在Java 5中引入枚舉來解決它):

見項目21 here(警告,PDF鏈接)的描述。

如果對象功能比開關功能更重要,那麼你會這樣做,因爲在C#中,如果沒有它,你可以得到類型saftey(這在5之前你無法使用Java)。

1

有一件事我一直喜歡做的就是用我的枚舉Description屬性,所以我可以存儲我的枚舉3個值容易

Public Enum States 
{ 
    [Description("Florida")] 
    FL = 124 
} 

然後,我有一個類,可以輕鬆地讀取到/從description屬性中,我可以將整個數據庫代碼表存儲在枚舉文件中。除了所有的海報提出了擴展方法,你可以使用屬性來驅動你的枚舉類的日誌。

你仍然需要利用另外一個類來實際做的枚舉的東西,但你可以使用屬性來更深入添加到您的枚舉,而不是隻具有鍵/值對,它基本上是。