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

前端之家收集整理的这篇文章主要介绍了[读书笔记]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(  }

打印结果如下图:

用法,如下例:

添加新的user登陆)和TransferUser(logout当前user,然后登陆新的user)两种方式数量进行限制,而SwitchUser和TransferUser使用的都是同一个限定Check方法,而两种对User的操作方式不同,所以导致TransferUser会出现问题.解决方案就是仍然使用同一个Check方法,但是给这个Check方法添加一个可选参数来判断到底是执行的哪个操作,然后根据不同的操作去做相应的修改.

TestMethod(, TestMethod( 名称,通过使用命名实参,只省略y参数 TestMethod(,name : 名称 TestMethod(x: ,y: ,name: 方法 TestMethod( x, name = Console.WriteLine( }

打印结果如下图:

标记泛型参数,以示其支持协变性. 为了更好的进行说明,下面用.Net类苦中的IEnumerable接口为例做演示:

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

代码中,AddRange方法接收的参数类型为IEnumerable,该接口的定义为IEnumerable,因为其泛型参数有out关键字标识,泛型的类型参数T支持协变性,则可将List转化为IEnumerable(这是被继承的协变性支持的. 因为List实现了IEnumerable接口). 支持协变性,所以可以进一步把IEnumerable转化为IEnumerable

标记泛型参数,以示其支持逆变性.为例进行演示:

Main( List<> listobject = List<> List<> liststrs = List<> 方法接收的参数类型为IEnumerable collection 代码是传入的是List类型的参数。 泛型类型参数T支持协变性,所以可以 转化为IEnumerable(这个是继承的协变性支持的) 接口委托支持协变性,所以可以把IEnumerable转化为——>IEnumerable类型。 错误了。 listobject.AddRange(liststrs); IComparer<> objComparer = IComparer<> objComparer2 = 类型的 liststrs变量的sort方法接收的是IComparer类型的参数 代码传入的是 IComparer这个类型的参数,要编译成功的话,必须能够转化为IComparer这个类型 泛型接口支持逆变,所以支持object转化为string类型 代码可以编译通过,在.Net 4.0之前的版本肯定会编译错误 代码就会出现编译错误,因为泛型的协变和逆变是C# 4.0 中新增加的特性,而.Net 4.0对应于C# 4.0。 liststrs.Sort(objComparer); TestComparer : IComparer<> Compare( obj1, }

代码中,listStrs变量的Sort应接收IComparer类型的参数,虽然传入的实参是IComparer类型,泛型接口支持逆变,所以可将object转化为string类型.

支持协变和逆变,类或泛型方法的类型参数都不支持协变和逆变不支持协变和逆变(例如List@H_500_403@无法转化为IEnumerable)标记类型参数

obj = obj = obj + ;错误 i = i = i + ;

代码中,第一行的obj为objec他类型,而编译器却检测出"+"运算符无法应用于object和int类型.

代码进行强制类型转换,从而使代码看起来更加简洁.调用Python等动态语言. 动态类型除了可以减少强制类型转换外,还可以让我们在C#语言中调用Python这样的动态语言.

百度就好了.

文字多增加一点内容,以后每个帖子后面都会加一些口语小贴士,这些都是自己平时看过的. 英语真的很重要,这里不用我多说大家应该都知道的.

猜你在找的C#相关文章