Reflection VB.Net

Imports System
Public Interface ITest
    Sub Test(ByVal greeting As String)
End Interface
Public Class MarshallableExample 
    Inherits MarshalByRefObject
    Implements ITest
    Shared Sub Main()
        Dim assemblyPath As String = Environment.CurrentDirectory & "\" & GetType(MarshallableExample).Assembly.GetName().Name & ".exe"
        Dim ad As AppDomain = AppDomain.CreateDomain("MyDomain")
        Dim oh As System.Runtime.Remoting.ObjectHandle = ad.CreateInstanceFrom(assemblyPath, "MarshallableExample")
        Dim obj As Object = oh.Unwrap()
        obj.GetType().InvokeMember("Test", System.Reflection.BindingFlags.InvokeMethod, Type.DefaultBinder, obj, New Object() { "Hello" })
        Dim it As ITest = CType(obj, ITest) 
        it.Test("Hi")
        Dim ex As MarshallableExample = CType(obj, MarshallableExample) 
        ex.Test("Goodbye")
    End Sub
    Public Sub Test(ByVal greeting As String) Implements ITest.Test
        Console.WriteLine("{0} from '{1}'!", greeting,AppDomain.CurrentDomain.FriendlyName)
    End Sub
End Class