您的位置:首页 > 编程语言 > C#

C#学习笔记三: C#2.0泛型 可控类型 匿名方法和迭代器

2016-04-19 18:13 836 查看

前言

C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法。
另外C#2.0还提出了可空类型,匿名方法和迭代器3个优美的特性。

1,泛型
1.1 泛型是什么
泛型的英文表述是"generic", 这个单词意为通用的。从字面意思可知,泛型代表的就是"通用类型",它可以代替任意的数据类型,使类型参数化,
从而达到之实现一个方法就可以操作多种数据类型的目的。泛型是将方法实现行为与方法操作的数据类型分离,实现了代码重用。

//使用yield自定义实现迭代器
class Program
{
static void Main(string[] args)
{
//创建一个对象
Friends friendCollection = new Friends();
//Friends实现了IEnumerable,所以可以使用foreach语句进行遍历
foreach (Friend f in friendCollection)
{
Console.WriteLine(f.Name);
}
Console.ReadKey();
}
}

//朋友类
public class Friend
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public Friend(string name)
{
this.name = name;
}
}

//朋友集合
public class Friends : IEnumerable
{
private Friend[] friendArray;

public Friends()
{
friendArray = new Friend[]
{
new Friend("张三"),
new Friend("李四"),
new Friend("王五")
};
}

//索引器
public Friend this[int index]
{
get { return friendArray[index]; }
}

public int Count
{
get { return friendArray.Length; }
}

//C#2.0简化了迭代器的实现
public IEnumerator GetEnumerator()
{
for (int i = 0; i < friendArray.Length; i++)
{
//在C#2.0中, 只需要使用下面的语句就可以实现一个迭代器
yield return friendArray[i];

//这里使用yield 简化了IEnumerator GetEnumerator中的Current() MoveNext() Reset() 方法的实现
}
}
}
View Code

4.3迭代器的执行过程图解

使用yield自定义迭代器
直接看code的实现形式吧:

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: