練習 複数のインターフェースを、複数のスコープで、見せたり見せなかったりする
ある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.