これは、私が今日コーディングしている間に私を困惑させた難しいものです。親クラスの実装をシャドーした親の型を通してメンバを呼び出す方法
:次のような制約を使用して - (それが明確である下記参照)私はSub Test1()
と
Test2()
を実行していると私は
TestCall()
にして渡していたオブジェクトのインスタンス
の
Shadows
メソッドの値をプリントアウトしたいとし
- は、
Class A
の内容を変更B
、及びC
- は
Sub Test1()
とSub Test2()
- TestCallを(変更できない)
if
、select case
らを持つことができないことはできません。 c。引き渡された引数の型を把握しようとする文。次にCType(o, <C or B>).Method()
を実行する。A
またはB
またはC
から継承すべてがB
とC
のようなクラスの無限の数があると仮定し、Method
- シャドウあなたが潜水艦の属性を変更することはできません(つまり、あなたが
Overridable/Overrides
にShadows
を変更することはできません)
私は動的にCType(o, C).Method()
の同等の操作を行うと、Test1のためC.Method
をプリントアウトして、動的にCType(o, B).Method()
の同等の操作を行うとB.Method
をプリントアウトしたいと思います。
<TestFixture()> _
Public Class Test
<Test()>
Public Sub Test1()
Dim o As A = New C
TestCall(o) '<-- THIS SHOULD PRINT "C.Method"
End Sub
Public Sub Test2()
Dim o As A = New B
TestCall(o) '<-- THIS SHOULD PRINT "B.Method"
End Sub
Public Sub TestCall(ByVal o as A)
o.Method()
End Sub
Class A
Public Sub Method()
Console.WriteLine("A.Method")
End Sub
End Class
Class B
Inherits A
Public Shadows Sub Method()
Console.WriteLine("B.Method")
End Sub
End Class
Class C
Inherits B
Public Shadows Sub Method()
Console.WriteLine("C.Method")
End Sub
End Class
End Class
:それは正しい、オーバーライドするメソッドであるかのようにどのようにシャドーイングメソッドを呼び出すこと? – Abel
本質的には – Denis