我有一個基類,它需要定義一個枚舉:擴展枚舉定義在子類中的.NET
BaseClass的 - SomeEnum
然後我需要從基類創建兩個派生類和在枚舉延伸的值:
ChildClass1:BaseClass的 - SomeEnum - SomeEnumValue1
ChildClass2:BaseClass的 - SomeEnum - SomeEnumValue2
在C#或VB.NET有人可以提供語法來做到這一點?或者,如果不可能,建議替代我想要做的事情?謝謝!
我有一個基類,它需要定義一個枚舉:擴展枚舉定義在子類中的.NET
BaseClass的 - SomeEnum
然後我需要從基類創建兩個派生類和在枚舉延伸的值:
ChildClass1:BaseClass的 - SomeEnum - SomeEnumValue1
ChildClass2:BaseClass的 - SomeEnum - SomeEnumValue2
在C#或VB.NET有人可以提供語法來做到這一點?或者,如果不可能,建議替代我想要做的事情?謝謝!
擴展枚舉中的值列表是不可能的。枚舉在聲明和編譯時是靜態的。
您的替代方法是停止使用枚舉並將其替換爲其他數據類型或類層次結構。
我也建議調查使用聚合而不是從基類繼承的可能性。 – 2010-01-04 18:14:44
最好的辦法是做:
public class ChildClass1
{
new public NewEnumValueList SomeEnum
{
..
}
}
如果這個新屬性返回枚舉值的一個全新的列表,或在其他地方所提到的,使用狀態模式。
其他人表示這是不可能的。我會根據語言的具體情況向他們推薦。這個答案更多的是「因爲它不起作用而要做的事情」。
顯然,您的選擇取決於您的應用程序。我最常見到的枚舉是給一個名稱和命名範圍以一個任意的整數值(而不是使用宏)。如果這是您的用法,您可以選擇構建字典(或字典對)來維護這些名稱和值的索引。在您的基類中,您將使用默認值填充它。在子類中,你可以用同樣的方法添加它。在孫輩課堂中,你可以用同樣的方式添加它。在重孫級別中,您添加....
這樣的系統的開銷應該是最小的,因爲除了存儲整數之外,您只是將相對較短的字符串散列爲名稱。與使用int值的編譯後比較相比,您確實在運行時遇到了問題,但除非實時(不太可能,如果C#是您的語言)系統或企業系統,否則查找應該可以忽略不計。
我認爲枚舉一般有違反OOP原則的傾向。除了最簡單的數據之外,最好避免使用它們,因爲它們會迅速增加耦合度,降低內聚力並導致脆弱性。 – dkackman 2010-01-05 03:20:49