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}"); } }
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(); }