大佬教程收集整理的这篇文章主要介绍了在这个假设的情况下,是否有可能在C#<4中围绕泛型协方差进行最终运行?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
public interface IAnimal { string Speak(); } public class Animal : IAnimal { public Animal() {} public string Speak() { return "[Animal] Growl!"; } } public class Ape : IAnimal { public string Speak() { return "[Ape] Rawrrrrrrr!"; } } public class Bat : IAnimal { public string Speak() { return "[Bat] Screeeeeee!"; } }
接下来,这是一个提供将字符串转换为IAnimals的方法的接口.
public interface ITransmogrifier<T> where T : IAnimal { T Transmogrify(string s); }
最后,这是一个做到这一点的策略:
public class Transmogrifier<T> : ITransmogrifier<T> where T : IAnimal,new() { public T Transmogrify(string s) { T t = default(T); if (typeof(T).Name == s) t = new T(); return t; } }
现在,问题.是否可以替换标记为[1],[2]和[3]的部分,以便该程序能够正确编译和运行?如果你不接触[1],[2]和[3]以外的部分就不能这样做,你是否仍然可以从包含任意IAnimal实现的集合中的Transmogrifier的每个实例中获得一个IAnimal?你甚至可以开始形成这样的系列吗?
static void Main(string[] args) { var t = new Transmogrifier<Ape>(); Ape a = t.Transmogrify("Ape"); Console.WriteLine(a.Speak()); // Works! // But can we make an arbitrary collection of such animals? var list = new List<Transmogrifier< [1] >>() { // [2] }; // And how about we call Transmogrify() on each one? foreach (/* [3] */ transmogrifier in list) { IAnimal ia = transmogrifier.Transmogrify("Bat"); } } }
public interface ITransmogrifier { IAnimal Transmogrify(string s); }
那你就可以了
var list = new List<ITransmogrifier>() { new Transmorgifier<Ape>(),new Transmorgifier<Bat>() ... };
以上是大佬教程为你收集整理的在这个假设的情况下,是否有可能在C#<4中围绕泛型协方差进行最终运行?全部内容,希望文章能够帮你解决在这个假设的情况下,是否有可能在C#<4中围绕泛型协方差进行最终运行?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。