Esempio n. 1
0
    static string GetRecursiveText(int verse)
    {
        if (verse == 1)
        {
            return("");
        }
        string recString = GetRecursiveText(verse - 1);

        if (verse == 2)
        {
            return($"wriggled and jiggled and tickled inside her.\n" +
                   "She swallowed the spider to catch the fly.\n");
        }
        else
        {
            return($"She swallowed the {GetAnimal(verse)} to catch the {GetAnimal(verse-1)}{(verse==3 ? " that " : ".\n")}{recString}");
        }
    }
Esempio n. 2
0
        static void Main(string[] args)
        {
            Console.WriteLine("逆变和协变");

            // 数组的协变
            Animal[] dogs = new Dog[] {};

            // 委托协变
            GetAnimal getAnimal = new GetAnimal(GetDog);

            getAnimal();

            // 委托逆变
            FeedDog feedDog = FeedAnimal;

            feedDog(new Dog());

            // 委托泛型逆变
            Feed <Animal> feedAnimalMethod = a => Console.WriteLine("Feed Animal Lambda!");
            Feed <Dog>    feedDogMethod    = feedAnimalMethod;

            feedDogMethod(new Dog());

            Find <Dog> findDog = () =>
            {
                Console.WriteLine("Find Dog!!");
                return(new Dog());
            };
            Find <Animal> findAnimal = findDog;

            findAnimal();

            // 接口逆变
            IFeedable <Dog> feedDog2 = new FeedImp <Animal>();

            feedDog2.Feed(new Dog());

            // 接口协变
            IFinder <Animal> findAnimal2 = new Finder <Dog>();

            //============

            Console.ReadLine();
        }