簡體   English   中英

C#枚舉:它們可以接受像Java枚舉這樣的成員和函數嗎?

[英]c# enums: can they take members and functions like java enums?

在Java中,可以為枚舉提供構造函數以及成員變量和函數。

我想知道在c#枚舉中是否也可能出現這種情況。 如果是這樣,怎么辦?

非常感謝!

做到這一點的唯一方法是使用擴展方法,這可以使它看起來像枚舉具有成員方法。

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

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

枚舉是強類型常量。 它們本質上是唯一的類型,可讓您將符號名稱分配給整數值。 在C#傳統中,它們是強類型的,這意味着即使其成員的基礎值相同,也不能將一個類型的枚舉隱式分配給另一種類型的枚舉。 同樣,整數類型和枚舉不是隱式可互換的。 不同枚舉類型和整數類型之間的所有分配都需要顯式轉換。

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

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

您可以模仿Java TypeSafe枚舉模式(在Java 5中引入枚舉以解決該問題之前,在Java中如此普遍):

有關說明,請參見此處的第21項(警告,PDF鏈接)。

如果對象功能比開關功能更重要,則可以執行此操作,因為在C#中,如果沒有它,您將獲得類型saftey(在Java之前的5中無法實現)。

我一直喜歡做的一件事是在枚舉上使用Description屬性,這樣我就可以輕松存儲3個枚舉值

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

然后,我有了一個可以輕松地從description屬性讀取/從description屬性讀取的類,因此我可以將整個數據庫代碼表存儲在枚舉文件中。 除了所有展示擴展方法的發布者之外,您還可以使用屬性來驅動枚舉類的日志。

您仍然需要利用另一個類對枚舉進行實際操作,但是您可以使用屬性為枚舉添加更多的深度,而不僅僅是使用鍵/值對。

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

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

據我所知,不,您不能使用C#。 雖然你為什么也想要? 附加變量和函數似乎有點奇怪!

您可以為枚舉類型定義擴展方法,但是不能將狀態添加到枚舉中,因為枚舉在內部表示為簡單的整數類型,並且沒有地方可以存儲狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM