正確ではありません。あなたは、例えば、基本型としてそれらをキャストすることによって基本型を期待する方法に派生型を渡すことができ
Enum BaseTypes
A = 1
B
C
End Enum
'start with an arbitrarily high number to avoid colliding with BaseTypes
Enum DerivedTypes
D = 10
E
F
End Enum
'ditto
Enum OtherDerivedTypes
G = 20
H
I
End Enum
:列挙型は本当にただの整数であるので、あなたはこのような何かを行うことができます(BaseTypes)DerivedTypes.E
これはあなたがcase文または各そうのように、関連するメソッドをオーバーライドし、あなたのBaseClass
とあなたの派生クラスでチェックバインドされた非仮想実行しないと仮定すると当然の唯一の仕事:
基本クラス:
Private Overridable Sub HandleValue(ByVal val As BaseTypes)
Select Case val
Case BaseTypes.A
'do something
Exit Select
Case BaseTypes.B
'do something else
Exit Select
End Select
End Sub
を
派生クラス:
Private Overloads Overrides Sub HandleValues(ByVal val As BaseTypes)
Select Case DirectCast(val, DerivedTypes)
Case DerivedTypes.D
'do something D-ish
Exit Select
Case DerivedTypes.E
'do something E-like
Exit Select
Case Else
'what we got wasnt a DerivedType, pass it off to the base
MyBase.HandleValues(val)
Exit Select
End Select
End Sub
注リニア継承チェーンのため、この唯一の作品 - 例えばより限定された範囲を単に扱う親ではなく、適切な兄弟に列挙値を適切に渡すことが非常に困難になるので、同じレベルの兄弟派生クラスが存在する場合、それは分解される。
一般に、私はこのアプローチをオープンエンドの拡張性のために推奨しません。ご覧のとおり、これはメンテナンスの悪夢です。ほとんどが石で設定されている、明確に定義されたスコープ付きの使用セットがある場合、これは実行可能です。
すべての出口選択が必要なわけではありません。とにかくカスケードしない – Pondidum