2008-04-03
C# 利用范型与扩展方法重构代码
在一些C#代码中常常可以看到
这样的代码在很多Open Source项目中是很经常看到的,比如Cecil,其共同特点是:某种特定类型的Collection+该Collection特殊的操作,在一个项目中可能充斥着数十个类似的Collection,类似的代码在Java中很难被重构,但是在C#中,却可以借助扩展方法与范型进行代码的精减。
首先创建范型的Collection,该例子可以用List<T>来代替,但作为例子,我们假设该List<T>是特殊的(可能有一些delegate)
Java代码
对于Car和Pet的特殊操作,我们通过扩展方法来实现
通过这样的方式,我们就实现了重构,两个Collection实现了求同存异。在我重构的Cecil之后,编译后的Assemly大小减小了一半.
//An Simple Example By Ray Linn
class CarCollection :ICollection
{
IList list;
public void Add(Car car)
{
list.Add(car);
}
.... function list for ICollection...
public void listPrice()
{
foreach(Car car in list)
System.Console.WriteLin(car.Price);
}
......more specifical function list...
}
class PetCollection :ICollection
{
IList list;
public void Add(Pet pet)
{
list.Add(pet);
}
.... function list for ICollection...
public void FeedPet()
{
foreach(Pet pet in list)
System.Console.WriteLin(pet.Eating());
}
......more specifical function list...
}
这样的代码在很多Open Source项目中是很经常看到的,比如Cecil,其共同特点是:某种特定类型的Collection+该Collection特殊的操作,在一个项目中可能充斥着数十个类似的Collection,类似的代码在Java中很难被重构,但是在C#中,却可以借助扩展方法与范型进行代码的精减。
首先创建范型的Collection,该例子可以用List<T>来代替,但作为例子,我们假设该List<T>是特殊的(可能有一些delegate)
Java代码
public CommonCollection<T>:ICollection<T>
{
IList<T> list
.... function list for ICollection...
}
public CommonCollection<T>:ICollection<T>
{
IList<T> list
.... function list for ICollection...
}
对于Car和Pet的特殊操作,我们通过扩展方法来实现
public static class CarExt
{
//Ext Function For CommonCollection<Car> by Ray Linn
public static void listPrice(this CommonCollection<Car> collection)
{
foreach(Car car in collection)
System.Console.WriteLin(car.Price);
}
......more specifical function list...
}
public static class PetExt
{
//Ext Function For CommonCollection<Pet> by Ray Linn
public static void FeedPet(this CommonCollection<Pet> collection)
{
foreach(Pet pet in list)
System.Console.WriteLin(pet.Eating());
}
}
通过这样的方式,我们就实现了重构,两个Collection实现了求同存异。在我重构的Cecil之后,编译后的Assemly大小减小了一半.
- 14:58
- 浏览 (489)
- 评论 (1)
- 分类: C# Language
- 进入论坛
- 相关推荐
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 45183 次

- 详细资料
搜索本博客
最近加入圈子
链接
最新评论
-
C# 利用范型与扩展方法重 ...
重构之后,Collection的操作速度大概有1~3倍的提高,这是由于C#的范型 ...
-- by ray_linn -
这篇谈钢琴的帖子
您也经常玩儿钢琴?
-- by ggggqqqqihc -
[备忘]安装/删除Window ...
sc也可以安装.net windows的服务,而且不需要生成Installer类 ...
-- by jiahanhui -
土笋冻
引用 告诉你,蛆虫是大美味。据说某地,挂肉置于簸箕上,蛆而食之,美名曰“肉芽”。 ...
-- by sptzone -
一季花开
居然在厦门
-- by lonelyblue






评论排行榜