我爱Aspx >> C#.Net >> C#2.0新特性探究之模拟泛型和内置算法C#2.0新特性探究之模拟泛型和内置算法
在C#2.0中,匿名方法、IEnumerable接口和匿名方法的合作,使很多的编程任务变得非常的简单,而且写出来的程序非常的优美。
比如,我们可以写出如下的代码:
List<Book> thelib = Library.getbooks();
List<Book> found = thelib.FindAll(delegate(Book curbook)
{
if (curbook.isbn.StartsWith("..."))
return true;
return false;
});
foreach (Book b in found)
Console.WriteLine(b.isbn);
这段程序非常简单的展示给我们需要查找的信息,代码也非常的直接易懂。内置的数据结构给了我们强大的算法支持,不过,能不能够为自定义的类定义类似的算法呢?
比如,如果我有一个自定义的Library类并没有使用List<Book>存储数据,而是使用某种自定义的数据结构,我能不能也让用户使用类似的语法,忽略存储细节的使用匿名委托来实现特定的算法呢?
答案当然是肯定的,而且在C#中实现这样的功能是非常的简单。
首先让我们看看FindAll中用到的匿名委托的原型
public delegate bool Predicate<T>(T obj);
很明显的,上面的代码等于注册了一个搜索的回调,而在List内部定义了某种遍历的机制,从而实现了一个漂亮的算法结构Closure。
看到了这些,我们就可以定义自己的算法结构了,首先,我定义了一个如下的类
public class MyVec<T>
{
Ҷƪл˵?
用Visual C#打造个性化的IE浏览器[05-20]
C# 特性(Attribute)入门(一)[05-20]
基于C#的接口基础教程之七(1)[05-20]
基于C#的接口基础教程之五(6)[05-20]
基于C#的接口基础教程之五(5)[05-20]
基于C#的接口基础教程之五(4)[05-20]
基于C#的接口基础教程之五(3)[05-20]
基于C#的接口基础教程之五(2)[05-20]
基于C#的接口基础教程之五(1)[05-20]
基于C#的接口基础教程之三[05-20]
用Visual C#打造个性化的IE浏览器[05-20]
如何保持datarow是DataRowState...[05-20]
优化TryCatch性能[05-20]
O/R Mapping 研究报告(1)[05-20]
C++大师Stan Lippman:我对中国程..[05-20]
nhibernate架构分析(uml图)[05-20]
单元测试和事先测试开发(2)[05-20]
C# 特性(Attribute)入门(一)[05-20]
在SPS中加入自定义WebService[05-20]
.NET断想[05-20]