`

C# 利用范型与扩展方法重构代码

阅读更多
在一些C#代码中常常可以看到
//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大小减小了一半.
分享到:
评论
3 楼 hd700 2008-06-14  
扩展方法对泛型的操作可以看作是一种特化,不过当面对大量的Car,Pet类时这样做要累死人的
2 楼 singleblue 2008-05-10  
不错,学习一下
1 楼 ray_linn 2008-04-03  
重构之后,Collection的操作速度大概有1~3倍的提高,这是由于C#的范型实现方式优于Java的擦除法,从而消除了拆箱和装箱的损耗。

相关推荐

    c#泛型详解,泛型方法,泛型类

    泛型是C#编程中的一项重要特性,它允许开发者创建可重用的代码,同时确保类型安全。在C#中,泛型通过参数化类型来实现,这意味着可以在一个泛型类或方法中使用一个或多个类型参数,这些参数将在实际使用时被具体的...

    范型程序设计与 STL.pdf

    范型编程是一种强大的软件开发方法,它允许程序员创建可重用的代码模板,这些模板可以应用于各种不同的数据类型。STL则是C++标准库的一部分,提供了容器、迭代器、算法和函数对象等高效工具,极大地提高了代码的效率...

    论文研究-消息传递范型与C/S范型双范型的主数据管理机制 .pdf

    在当今信息产业高速发展的背景下,数据量呈爆炸式增长,企业系统中数据的管理和同步显得尤为重要。...通过这种双范型的MDM机制,企业能够更好地管理和利用数据资源,为数据分析、决策制定等提供准确的数据支持。

    C++多范型设计

    在《C++多范型设计》中,Coplien详细讲解了如何有效地利用模板来构建高效、灵活且可扩展的软件系统。 本书首先介绍了模板的基础知识,包括模板类和模板函数的声明与使用,以及模板参数的推断。读者将学习如何定义...

    生成静态页面及范型的代码例子

    而范型(Template)则是一种编程语言特性,用于创建可重用的代码模板,可以提高代码的效率和一致性。 首先,让我们讨论静态页面的生成。在Web开发中,静态页面通常用于内容不经常变动的部分,如网站的导航、页脚或...

    《分布式系统原理与范型》.pdf

    《分布式系统原理与范型》作为一本系统介绍分布式系统基本原理与实践应用的书籍,涵盖了分布式系统设计与实现的核心理念。分布式系统指的是由多个可以独立运行的计算单元构成的系统,这些计算单元通过通信网络相互...

    分布式系统原理与范型

    《分布式系统原理与范型》是分布式系统中的经典教材,全书分为两部分:原理和范型。第一部分详细讨论了分布式系统的原理、概念和技术,其中包括通信、进程、命名、同步、一致性和复制、容错以及安全。第二部分给出了...

    《分布式系统原理与范型(第二版)》复习资料

    分布式系统原理与范型是计算机科学领域的一个重要研究方向,它涉及如何构建和管理由多个独立计算机组成的系统,这些系统能够协调工作,对外表现得就像单一的、协调一致的系统一样。在分布式系统中,透明性、开放性、...

    分布式系统原理与范型答案(第二版)答案

    分布式系统原理与范型是计算机科学中的一个重要领域,它涵盖了多台计算机如何通过网络协同工作,以实现一个共同的目标。《分布式系统原理与范型(第二版)》这本书深入浅出地介绍了这一主题,旨在帮助读者理解分布式...

    Reflector(.Net映射)

    - **插件支持**:通过扩展插件,如CodeDigger、RefactoringEssentials等,增强其功能,如代码重构、代码覆盖率分析等。 - **反汇编视图**:对于非.NET代码,如原生DLL或资源,Reflector也能提供反汇编视图。 4. *...

    分布式系统原理与范型(第二版)

    分布式系统原理与范型是IT领域中至关重要的一个主题,特别是在云计算、大数据处理以及现代互联网服务的背景下,理解和掌握分布式系统的概念与实践至关重要。本书作为第二版,深度探讨了这一领域的核心理论和常见模式...

    分布式系统原理与范型课件

    分布式系统原理与范型是计算机科学中的一个重要领域,它涉及到多台计算机协同工作,共同处理一个任务或数据,以提供高可用性、可扩展性和性能优化。这些课件旨在为学习者提供一个全面且系统的分布式系统知识框架。...

    Java 范型攻略篇

    ### Java范型攻略篇:深度解析与应用 #### 一、引言:Java范型的引入 在Java的发展历程中,...在实际开发中,合理利用范型可以显著提升代码质量和维护效率,避免潜在的运行时错误,是现代Java编程不可或缺的一部分。

    分布式系统-原理与范型(第2版) 完整版

    第2~9章讨论的是分布式系统的的原理、概念和技术,包括通信、进程、命名、同步化、一致性和复制、容错性以及安全性等,而分布式应用的开发方法(即范型)在第10~13章中进行了讨论。但是,与前一版不同的是,我们...

    分布式系统原理与范型第二版课后习题答案

    分布式系统是一种由多台计算机组成的网络系统,这些计算机在用户看来就像是一个单一的系统。它们通过网络互相通信和协调工作,...通过理解分布式系统原理与范型,可以更好地设计和部署高效、可靠、可维护的分布式应用。

    分布式系统原理与范型中文版

    分布式系统原理与范型中文版 经典分布式理论书籍

    代码阅读方法与实践-阅读报告

    《代码阅读方法与实践》是一门旨在提升程序员代码理解能力的课程或书籍,它强调了在信息技术领域中,代码阅读的重要性远超过代码编写。在软件开发工作中,理解并能高效地阅读他人的代码是必不可少的技能,无论是接手...

    分布式系统-原理与范型(第2版)

    分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版)

    主要程序设计语言范型综论与概要

    程序设计语言范型是指导程序员如何组织代码和解决计算问题的不同方法论。这些范型定义了编程语言的基本结构和约束,影响着代码的编写方式以及解决问题的思路。本篇文章将深入探讨几种主要的程序设计语言范型,并提供...

Global site tag (gtag.js) - Google Analytics