asp.net中CSharpThinking 扩展方法

本章主要描述扩展方法的应用及相关原理。

一, 演变

  1.1 扩展方法特征

    1)必须在一个静态方法中。

    2)至少有一个参数。

    3)第一个参数必须附加this关键字作为前缀。

    4)第一个参数不能有其他任何修饰符(如 out,ref)。

    5)第一个参数的类型不能是指针。

    6) 如果扩展方法名称与类型的方法一样(如都命名为ToString),则只有类型的方法会被调用,而扩展方法的不会,这是一个优先级问题。

1.2 扩展方法与普通静态方法的比较

     C#2 时对一个类进行扩展而又不能应用继承方式时,只能编写稍微“丑陋”的静态方法。C#3允许我们更改静态类,来假装方法是类与生俱来的。

 代码如下 复制代码

 public static void Demo1()
         {
             // C#2 普通调用方式
             string Log2 = ExtensionCompare.GetLogError("C#2 普通静态方式");
             Console.WriteLine(Log2);
 
             // C#3 扩展方法调用方式
             string Log3 = "C#3扩展方法方式".ToLogError();
             Console.WriteLine(Log3);
 
             Console.ReadLine();
         }
 
 
         /// <summary>
         /// C#2 常规静态方法扩展
         /// </summary>
         /// <param name="loginfo">格式化信息</param>
         /// <returns></returns>
         public static string GetLogError(string loginfo)
         {
             return string.Format("This is C#2 style: {0}", loginfo);
         }
         /// <summary>
         /// C#3 用扩展方法实现的string类型扩展
         /// </summary>
         /// <param name="loginfo"></param>
         /// <returns></returns>
         public static string ToLogError(this string loginfo)
         {
             return string.Format("This is C#3 style: {0}", loginfo);
         }

二, 扩展方法最大的用途是在Linq中使用。

  2.1.   Where , Select , OrderBy,

    注:排序不会改变原序列的顺序及类型,返回一个新序列,这与List.Sort不同,后者会改变序列。所以Linq是无副作用的,除了一些及其的特殊情况。

 代码如下 复制代码

company.Department.Select
                 (dept => new
                 {
                     Name = dept.name,
                     Cost = dept.Employees.Sum(person=>person.Salary);
                 })
             .OrderByDescending(x=>x.Cost);

2.2.扩展方法更注重结果而非过程理解,这是与静态方法的区别。

时间: 2024-10-31 18:33:35

asp.net中CSharpThinking 扩展方法的相关文章

asp.net中 C#扩展方法实例

这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,使用时不需要去修改或编译类型本身的代码. 先做个例子吧,以String为例,需要在字符串类型中加一个从字符串转为数值的功能. 以往我们可能是这样做的,会专门写一个方法做过转换 public static int StrToInt(string s) {     int id;     int.TryParse(s, out id);//这里当转换失败时返回的id为0  

objective-C中的扩展方法与partial class

 在c#中要扩展一个现有类很容易,比如这样: public static class Utils { public static void PrintToConsole(this string strSrc) { Console.WriteLine(strSrc); } } 这样就为String类添加了一个PrintToConsole的方法,使用方法如下: class MainClass { public static void Main (string[] args) { "Hello Wor

C#3.0 中使用扩展方法来扩展接口

有关扩展方法的一些知识点请参看我的前篇博客:C#3.0 中的扩展方法 (Extension Methods)前篇博客中我重点介绍了两个特殊场景:1.扩展方法跟原来类的方法重名时候的处理逻辑2.扩展方法的嵌套现在我们来看扩展方法使用的第三个场景:使用扩展方法来扩展接口 应用场景举例:我们有时候会发现最初定义的一个接口,在现在环境下,这个接口需要再增加一个函数.有了扩展方法后,我们在这种情况下又多了一种实现的选择.下面以代码来说明这个问题:namespace Hongjun.Guo{interfac

FCKeditor 2.6在ASP.NET中的配置方法(附源码下载)

导读: FCKEditor目前的最新版本是2.6,但支持.NET的DLL版本还是2.5,本文介绍 FCKEditor2.6在ASP.NET中的配置方法. 本文的示例下载地址(包含了整个解决方案及网站,下载后即可使用): 地址:http://www.china-aspx.com/Forum/showtopic-57.aspx FCKEditor官方下载地址:http://www.fckeditor.net/download 配置方法如下: 一.在官方网站上下载 下载地址:http://source

.net3.0中的扩展方法(示例)

先定义一个类Utils,在该类中定义了一个string类的扩展方法_IsNull  using System;namespace LinqDemo.App_Code{    public static class Utils    {        /**//// <summary>        /// 传统写法        /// </summary>        /// <param name="s"></param>     

[转]TinyMCE(富文本编辑器)在Asp.Net中的使用方法

   from:http://tangb4c.yo2.cn/archives/633878 04月 22nd, 2008 现在做网页,用FCKEditor用得比较多,它的实现原理是在要加入FCKEditor的地方加入一个iframe,并将其src指向FCKeditor/editor/fckeditor.html?InstanceName=commodityBrief&Toolbar=Default,至于后面的参数,根据情况不同,参数传递得不一样,然后里面用Table来实现顶部的工具栏,接着下面再

说说NET3.5中的扩展方法

扩展方法配合Lambda表示达,可以方便我们进行数据的查询,看个代码吧: IEnumerable<string> x=new List<string> {"1","zzl","good"}; //为对象赋值 foreach (var info in x.ForUser("zzl")) //从其中筛选zzl这个字符 { Response.Write(info); }   public static cla

ASP.NET中cookie读写方法介绍

Cookie (HttpCookie的实例)提供了一种在 Web 应用程序中存储用户特定信息的方法.例如,当用户访问您的站点时,您可以使用Cookie 存储用户首选项或其他信息.当该用户再次访问您的网站时,应用程序便可以检索以前存储的信息. ASP.NET中的cookie:创建Cookie方法 (1) Response.Cookies["userName"].Value = "admin"; Response.Cookies["userName"

在ASP.NET中调用存储过程方法新解

asp.net|存储过程 在使用.NET的过程中,数据库访问是一个很重要的部分,特别是在B/S系统的构建过程中,数据库操作几乎成为了一个必不可少的操作.调用存储过程实现数据库操作使很多程序员使用的方法,而且大多数的程序员都是能使用存储过程就使用存储过程,很少直接使用SQL语句,所以存储过程是很有用而且很重要的. 存储过程简介 简单的说,存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用.它的参数可以被传递和返回.与