如果我在基础对象中定义了一个具有多个默认值的ENUM。当我从基础对象继承时,我想添加更多选项,ENUM列表是特定于继承对象的。
例如,我的基地可以有一个名为Direction的ENUM值:
无
ALL
停止
开始
我创建了一个新的类调用Compass,它继承了基类以及将以下内容添加到ENUM方向的内容。
北
南
东
西
我创建了一个新的类调用Navigation,它继承了基类以及将以下内容添加到ENUM方向的内容
左
右
所以,在我的继承类中,我是否扩展了ENUM。 我正在使用VB.NET。
答案 0 :(得分:1)
你不能这样做,因为枚举是值类型,因此是密封的。
虽然他是一篇试图解决这个问题的代码项目文章:http://www.codeproject.com/KB/cs/EnumBuilder.aspx
答案 1 :(得分:0)
熟悉System.Reflection和System.Reflection.Emit命名空间,但如果使用ICollection(KeyValuePair(字符串,整数))或其他类似的东西,它可能会更好。
以下是EnumBuilder的vb.net示例,其中大部分是直接从http://msdn.microsoft.com/en-us/library/system.reflection.emit.enumbuilder.aspx复制的
Sub Main()
Dim abcList As New List(Of String)
For Each Item As String In [Enum].GetNames(GetType(FirstEnum))
abcList.Add(Item)
Next
For Each Item As String In [Enum].GetNames(GetType(SecondEnum))
abcList.Add(Item)
Next
For Each Item As String In [Enum].GetNames(GetType(ThirdEnum))
abcList.Add(Item)
Next
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
' Create a dynamic assembly in the current application domain,
' and allow it to be executed and saved to disk.
Dim aName As System.Reflection.AssemblyName = New System.Reflection.AssemblyName("TempAssembly")
Dim ab As System.Reflection.Emit.AssemblyBuilder = currentDomain.DefineDynamicAssembly( _
aName, System.Reflection.Emit.AssemblyBuilderAccess.RunAndSave)
' Define a dynamic module in "TempAssembly" assembly. For a single-
' module assembly, the module has the same name as the assembly.
Dim mb As System.Reflection.Emit.ModuleBuilder = _
ab.DefineDynamicModule(aName.Name, aName.Name & ".dll")
Dim eb As System.Reflection.Emit.EnumBuilder = _
mb.DefineEnum("MyNewEnum", System.Reflection.TypeAttributes.Public, GetType(Integer))
' Define members, set values (integer)
Dim i As Integer = 0
For Each item As String In abcList
eb.DefineLiteral(item, i)
i += 1
Next
Dim finished As Type = eb.CreateType() 'At this point, your System.RuntimeType exists with a BaseType of System.Enum
ab.Save(aName.Name & ".dll")
'finished.getEnumNames returns data similar to a NameValueCollection(of string,int32)
End Sub
Enum FirstEnum
One
Two
Three
End Enum
Enum SecondEnum
Four
Five
Six
End Enum
Enum ThirdEnum
Seven
Eight
Nine
End Enum