// Multiple dispatch or multimethods is the feature of some object-oriented programming languages in which a function or method can be dynamically dispatched based on the run time (dynamic) type of more than one of its arguments." http://en.wikipedia.org/wiki/Multiple_dispatch
        public static void Start()
        {
            Console.WriteLine("\nMultipleDispatchNotWorking\n");

            SpaceShip ship = new SpaceShip()
            {
                Name = "enterprise"
            };
            IObjectInSpace a = new Planet()
            {
                Gravity = 1
            };
            IObjectInSpace b = new Planet()
            {
                Gravity = 5
            };
            IObjectInSpace c = new Asteroid()
            {
                Metal = 3
            };
            IObjectInSpace d = new Asteroid()
            {
                Metal = 2
            };

            // The following doesn't work because C# doesn't do automatic dynamic dispathing
            Console.WriteLine(ship.DescribeInteraction(a));
            Console.WriteLine(ship.DescribeInteraction(b));
            Console.WriteLine(ship.DescribeInteraction(c));
            Console.WriteLine(ship.DescribeInteraction(d));
        }
        // Multiple dispatch or multimethods is the feature of some object-oriented programming languages in which a function or method can be dynamically dispatched based on the run time (dynamic) type of more than one of its arguments." http://en.wikipedia.org/wiki/Multiple_dispatch
        public static void Start()
        {
            Console.WriteLine("\nMultipleDispatchNotWorking\n");

            SpaceShip ship = new SpaceShip() { Name = "enterprise" };
            IObjectInSpace a = new Planet() { Gravity = 1 };
            IObjectInSpace b = new Planet() { Gravity = 5 };
            IObjectInSpace c = new Asteroid() { Metal = 3 };
            IObjectInSpace d = new Asteroid() { Metal = 2 };

            // The following doesn't work because C# doesn't do automatic dynamic dispathing
            Console.WriteLine(ship.DescribeInteraction(a));
            Console.WriteLine(ship.DescribeInteraction(b));
            Console.WriteLine(ship.DescribeInteraction(c));
            Console.WriteLine(ship.DescribeInteraction(d));
        }