[英]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.