C# 2.0
序言
泛型
为什么需要泛型?
分部类型
分部类和方法
partial
匿名方法
使用Delegate的时候很多时候没必要使用一个普通的方法,因为这个方法只有这个Delegate会用,并且只用一次,这时候使用匿名方法最合适。
delegate
运算符创建一个可以转换为委托类型的匿名方法:
Func<int, int, int> sum = delegate (int a, int b) { return a + b; }; Console.WriteLine(sum(3, 4)); // output: 7
从 C# 3 开始,lambda 表达式提供了一种更简洁和富有表现力的方式来创建匿名函数。 使用 => 运算符构造 lambda 表达式:
Func<int, int, int> sum = (a, b) => a + b; Console.WriteLine(sum(3, 4)); // output: 7
使用 delegate
运算符时,可以省略参数列表。 如果这样做,可以将创建的匿名方法转换为具有任何参数列表的委托类型,如以下示例所示:
Action greet = delegate { Console.WriteLine("Hello!"); }; greet(); Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); }; introduce(42, 2.7); // Output: // Hello! // This is world!
可以为null的值类型
引用类型可以为空,但是值类型不能为空。在一些的情况下,这可能就是一个坑,比方说当数据库或者XML的数据映射到C#类型上时,因为数据库和XML在int和double等值类型(C#)可以为null,但是C#类型不能为null。
C#有一个解决方案:可以为空的值类型
int x1 = 1; int? x2 = null;
正常的值类型可以赋值给可以为空的值类行,但是反过来不行,需要强制类型转换
x2=x1;//这是可行的 x1=x2;//这不可行 x1=(int)x2;//这将可行
如果在赋值的时候不知道该值是否为空,这可以使用HasValue
来判断是否为空,如果为空则true,否则为false
int x3 = x2.HasValue ? x2.Value : -1;
如果操作的是 可为空的值类型,则可以简写语法。如果为空,这赋值-1,否者赋值x3的值。
int x6 = x3 ?? -1;
迭代器
C#中的迭代器可以让你实现foreach访问某个集合中的所有元素。像数组、集合等已经内置了迭代器,我们可以直接进行foreach,而我们自定义的类型,自然是无法进行这个操作的,对于自定义的类型实现迭代器模式通过IEnumerable和IEnumerator接口(或泛型接口)进行实现。在C#1.0中我们自定义类型实现迭代器是非常繁琐的想要对IterationSample进行foreach,首先继承IEnumerable接口,会有一个GetEnumerator的方法需要去实现,这时创建另一个类实现IEnumerator接口,实现MoveNext方法与Current属性,我们需要进行位置的处理。
这里在C#2.0中变的简单了,这时使用yield return就可以代替整个IterationSampleIterator这个类。

static void Main() { foreach (int number in SomeNumbers()) { Console.Write(number.ToString() + " "); } // Output: 3 5 8 Console.ReadKey(); } public static System.Collections.IEnumerable SomeNumbers() { yield return 3; yield return 5; yield return 8; }
协变和逆变
在 C# 中,协变和逆变能够实现数组类型、委托类型和泛型类型参数的隐式引用转换。 协变保留分配兼容性,逆变则与之相反。
除现有功能以外的其他 C# 2.0 功能:
getter/setter 单独可访问性
方法组转换(委托)
静态类
委托推断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2017-12-08 前端框架收集
2016-12-08 mysql创建高性能索引