C#高级程序设计(三)——泛型基础
在C#引入泛型之前,如果一个类或者一个方法想要支持多种类型,它就不得不把相应的参数或者返回值定义为object类型,这就意味着代码在执行的过程中需要很多的转型,并不是说你的代码一定不要用到转型,但是转型确实会带来很多潜在的问题,因为它将本该属于编译时的类型检查延迟到了运行时,而且也会带来一定的性能问题(装箱和拆箱)。
C#2引入了泛型,包括两种形式的泛型:泛型类型和泛型方法。下面说一下和泛型有关的一些特性:
一、泛型约束
C#泛型支持四种类型的约束,但是它们使用同样的语法:
引用类型约束
对于引用类型的约束,泛型对象之间可以通过==和!=进行比较,但是需要注意的是,除非指定了其它约束,否则只会比较引用本身(即使引用对象类型重载了比较方法),使用转换类型约束,重载的比较方法才会被编译器调用。
static bool AreReferencesEqual<T>(T first, T second) where T : class { return first == second; }string str = "World"; string str1 = "Hello" + str; string str2 = "Hello" + str; Console.WriteLine(str1 == str2); Console.WriteLine(AreReferencesEqual(str1, str2)); Output:TrueFalse