練習 複数のインターフェースを、複数のスコープで、見せたり見せなかったりする

ある2つの変数のスコープがあって、1つのスコープではインターフェースAとインターフェースBが見えて、もうひとつのスコープではインターフェースBだけ、という実装の練習。↓はクラスファイルのコード。言語はVS2005で動くVB

Public Interface InterfaceB
    Sub MethodB()
End Interface

Public Class PublicClassFactory
    Private Interface InterfaceA
        Sub MethodA()
    End Interface
    Private Class MultiInterfaceClass
        Implements InterfaceB
        Implements InterfaceA
        Public Sub MethodA() Implements InterfaceA.MethodA
            System.Console.WriteLine("MethodA CALLED.")
        End Sub
        Public Sub MethodB() Implements InterfaceB.MethodB
            System.Console.WriteLine("MethodB CALLED.")
        End Sub
    End Class
    Private myMultiInterfaceInstance As New MultiInterfaceClass
    Public Function GetClassB() As InterfaceB
        GetClassB = CType(myMultiInterfaceInstance, InterfaceB)
    End Function
    Public Sub DoSomething()
        System.Console.WriteLine("DoSomething CALLED")
        System.Console.WriteLine("CALL MethodA and MethodB from inside of PublicClassFactory")
        myMultiInterfaceInstance.MethodA()
        myMultiInterfaceInstance.MethodB()
    End Sub
End Class

このクラスの内部からはInterfaceA/Bの実装であるMethodAとMethodBの両方が使える。

↓がモジュールのメイン。

Module Module1
    Sub Main()
        Dim myPublicClassFactory As New PublicClassFactory
        Dim myInstanceB As InterfaceB
        myInstanceB = myPublicClassFactory.GetClassB()
        System.Console.WriteLine("CALL MethodB from outside of PublicClassFactory")
        myInstanceB.MethodB()
        System.Console.WriteLine()
        System.Console.WriteLine("CALL DoSomething")
        myPublicClassFactory.DoSomething() 'PublicClassFactoryの外側からMethodAを参照することはできない
    End Sub
End Module

このメインからはInterfaceBの実装であるMethodBしか使えない。MethodAのインタフェースはプライベートにしてあるし、マットウな方法でMethodAを直接たたく手段はない。

実行結果は、こうなる。

CALL MethodB from outside of PublicClassFactory
MethodB CALLED.

CALL DoSomething
DoSomething CALLED
CALL MethodA and MethodB from inside of PublicClassFactory
MethodA CALLED.
MethodB CALLED.