using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Echo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. RealProxy派生クラスのインスタンスを作り透過プロキシを取得
            EchoClass proxy =
              (EchoClass)new EchoProxy().GetTransparentProxy();

            // 2. Echoを呼び出すと、RealProxyTest#Invokeが呼び出される
            proxy.Echo("Hello", "World");

            Console.WriteLine();

            try
            {
                // 5. 例外が発生するパターン
                proxy.Echo();
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine("Error: {0}", ex);
            }

            Console.ReadKey();
        }
    }
}
