深入理解C#第二版笔记

基础知识

委托

如果代码想要执行操作,但不知道操作细节,一般可以使用委托。例如:Thread类之所以知道要在一个新线程里运行什么,唯一的原因就是在启动新线程时,向它提供了一个ThreadStart委托实例。

委托的构成

  1. 声明委托类型
  2. 创建一个要执行代码的方法
  3. 创建一个委托实例
  4. 调用(invoke)委托实例

数据类型

匿名类型

var John = new { Name = "John" , Age = 23 };

动态类型

将变量声明为dynamic,编译器会对变量的几乎所有处理都区别对待,将所有绑定决策留给执行时。

dynamic dyc = "hello";
Console.WriteLine( dyc.Length );
dyc = new sring[] { "hi" , "there" };
Console.WriteLine( dyc.Length );

Function委托类型及lambda表达式

Func<int , int , string> func = ( x , y ) => ( x * y ).ToString();
Console.WriteLine( func( 12 , 45 ) );

值类型和引用类型

对于引用类型的变量,它的值永远是一个引用。
对于值类型的变量,它的值永远是该值类型的一个值。

用泛型实现参数化类型

泛型的限制

泛型可变性的缺乏

泛型不支持协变性,这是为了类型安全性着想,例如不能将List转换成List

原文地址:https://www.cnblogs.com/Shoring/p/4534804.html