C# · 12月 20, 2021

[读书笔记]C#学习笔记七: C#4.0中微小改动-可选参数,泛型的可变性

<p style=”background: gray; color: #ffffff; font-size: 18pt;”>前言

<div class=”cnblogs_code”>

TestMethod(,, TestMethod(, TestMethod( x, y = , name = Console.Write( }

打印结果如下图:

TestMethod(, TestMethod( TestMethod(,name : TestMethod(x: ,y: ,name: TestMethod( x, name = Console.WriteLine( }

打印结果如下图:

接口为例做演示:

List listObject = List List listStrs = List listObject.AddRange(listStrs); listStrs.AddRange(listObject); }

,该接口的定义为IEnumerable,因为其泛型参数有out关键字标识,泛型的类型参数T支持协变性,则可将List转化为IEnumerable(这是被继承的协变性支持的. 因为List实现了IEnumerable接口). 转化为IEnumerable

为例进行演示:

Main( List listobject = List List liststrs = List collection 类型的参数。 。 泛型类型参数T支持协变性,所以可以 转化为IEnumerable(这个是继承的协变性支持的) 接口委托支持协变性,所以可以把IEnumerable转化为——>IEnumerable类型。 listobject.AddRange(liststrs); IComparer objComparer = IComparer objComparer2 = 类型的 liststrs变量的sort方法接收的是IComparer类型的参数 这个类型的参数,要编译成功的话,必须能够转化为IComparer这个类型 泛型接口支持逆变,所以支持object转化为string类型 liststrs.sort(objComparer); TestComparer : IComparer Compare( obj1, }

类型的参数,虽然传入的实参是IComparer类型,泛型接口支持逆变,所以可将object转化为string类型.

)

obj = obj = obj + ; i = i = i + ;