asp.net中CSharpThinking扩展方法分析

本文实例讲述了asp.net中CSharpThinking扩展方法。分享给大家供大家参考。具体分析如下:

一、演变

① 扩展方法特征

1)必须在一个静态方法中。
2)至少有一个参数。
3)第一个参数必须附加this关键字作为前缀。
4)第一个参数不能有其他任何修饰符(如 out,ref)。
5)第一个参数的类型不能是指针。
6) 如果扩展方法名称与类型的方法一样(如都命名为ToString),则只有类型的方法会被调用,而扩展方法的不会,这是一个优先级问题。

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

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中使用。

① 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);

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

希望本文所述对大家的asp.net程序设计有所帮助。

(0)

相关推荐

  • .NET实用扩展方法详解

    持续更新的.NET实用扩展方法,具体内容如下 1. 字符串转换为可空数值类型(int, long, float...类似) /// <summary> /// 将字符串转换成32位整数,转换失败返回null /// </summary> /// <param name="str">转换的字符串</param> /// <returns>转换之后的整数,或null</returns> public static in

  • asp.net中CSharpThinking扩展方法分析

    本文实例讲述了asp.net中CSharpThinking扩展方法.分享给大家供大家参考.具体分析如下: 一.演变 ① 扩展方法特征 1)必须在一个静态方法中. 2)至少有一个参数. 3)第一个参数必须附加this关键字作为前缀. 4)第一个参数不能有其他任何修饰符(如 out,ref). 5)第一个参数的类型不能是指针. 6) 如果扩展方法名称与类型的方法一样(如都命名为ToString),则只有类型的方法会被调用,而扩展方法的不会,这是一个优先级问题. ② 扩展方法与普通静态方法的比较 C#

  • 简单介绍C# 中的扩展方法

    扩展方法是C#3.0引入的新特性,使用它,可以在不修改某一类的代码的情况下,实现该类方法的扩展. 为一个类添加扩展方法,需要三个要素: 1.扩展方法所在的类为静态类 2.扩展方法本身要为静态方法 3.扩展方法的第一个参数要用关键字this,指向要扩展的类 下面请看一个实例: //静态类 public static class TestExtensionM { //静态方法 public static int ExtensionInt(this int s) //this关键字 { return

  • Spring中的refresh方法分析

    目录 1 前言 2 源码入口哪里找 3 refresh 核心方法 4 总结 1 前言 在项目开发和面试过程中 spring 都是非常重要的,在前文中已经讲述了Spring BeanFactory 与 FactoryBean 的区别,在后续的文章中将继续更新 Spring 源码心得.了解原理性的一些内容之后就会在应用能够得心应手,在项目开发和面试中,就能很好地 battle 和 show muscle. 2 源码入口哪里找 Spring 的源码阅读,需要找到入口文件,一般情况下在 Spring 项

  • ASP.NET中图片显示方法实例

    本文实例讲述了ASP.NET中图片的显示方法.分享给大家供大家参考.具体如下: genimage.ashx: 复制代码 代码如下: <%@ WebHandler Language="C#" Class="netpix.ImageGenerator" %> genimage.ashx.cs: // Copyright (C) 2003 by Greg Ennis // (mailto:greg@ennis.net) // // The contents o

  • ASP.NET中ServerPush用法实例分析

    本文实例讲述了ASP.NET中ServerPush用法.分享给大家供大家参考.具体分析如下: 什么是ServerPush,服务器向客户端"推送",其实就是"长连接" 只有浏览器请求服务器端,服务器端才给浏览器响应数据,不会主动向浏览器推送数据,这是一种安全考虑,也是提高服务器的性能考虑,如果服务器向浏览器主动推送数据,就要用到ServerPush等技术模拟实现. 举个例子: 通过两个页面互相发送消息实现,消息放到数据库. /// <summary> //

  • C#中的扩展方法详解

    扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 以上是msdn官网对扩展方法的描述,现在我通过一个情景例子来对此进行阐释.假设一个控制台程序class Program{}里面的主函数如下: static void Main(string[] args) { DateTime now = DateTime.Now; string time = now.ToStri

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

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

  • c#中的扩展方法学习笔记

    前言 最近在看王清培前辈的.NET框架设计时,当中有提到扩展方法 . 开头的一句话是:扩展方法是让我们在不改变类原有代码的情况下动态地添加方法的方式,这给面向对象设计 模块设计带来了质的提升 很明显,扩展方法在框架设计或者平时码代码中,是能够提升我们整个架构的灵活性的 简介 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的. 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀. 扩展方法当然不能破坏面向对象封装的概念,所以只能是访问所扩展类的public成

  • 深入理解C#中的扩展方法

    扩展方法(Extension Methods)是C#3.0时引入的新特性,相信很多人都听过并且也都用过,最常见的是在LINQ中的使用. 不仅如此,在开发中,我们也可以创建自己扩展方法,使用它来优化类的设计.简化代码.本文将简单地介绍扩展方法的概念.定义.使用场景以及要注意的点. 一.概念 扩展方法是一种特殊类型的静态方法.对于一个C#类型,如类(包括密封类).值类型.接口等,扩展方法可以在不改变该类型源码的前提下,为它的实例提供新的成员.因此,若要为一个框架或第三方库的某个类型增加辅助功能,通过

  • 几种判断asp.net中session过期方法的比较

    方法一:最麻烦也是最容易想到的方法,在每个页面的page_load()方法里面判断: 复制代码 代码如下: protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                if (Session["username"] != null)                { //登陆成功的情况              

随机推荐