Reflection C#

using System;
public interface ITest
{
    void Test(string greeting);
}
public class MarshallableExample : MarshalByRefObject, ITest
{
    static void Main()
    {
        string assemblyPath = Environment.CurrentDirectory + "\\" +typeof(MarshallableExample).Assembly.GetName().Name + ".exe";
        AppDomain ad = AppDomain.CreateDomain("MyDomain");
        System.Runtime.Remoting.ObjectHandle oh = ad.CreateInstanceFrom(assemblyPath, "MarshallableExample");
        object obj = oh.Unwrap();
        obj.GetType().InvokeMember("Test", System.Reflection.BindingFlags.InvokeMethod, Type.DefaultBinder, obj, new object[] { "Hello" });
        ITest it = (ITest) obj;
        it.Test("Hi");
        MarshallableExample ex = (MarshallableExample) obj;
        ex.Test("Goodbye");
    }
    public void Test(string greeting)
    {
        Console.WriteLine("{0} from '{1}'!", greeting,AppDomain.CurrentDomain.FriendlyName);
    }
}