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

这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,使用时不需要去修改或编译类型本身的代码。

先做个例子吧,以String为例,需要在字符串类型中加一个从字符串转为数值的功能。

以往我们可能是这样做的,会专门写一个方法做过转换

public static int StrToInt(string s) {     int id;     int.TryParse(s, out id);//这里当转换失败时返回的id为0     return id; }

调用就使用

string s = "abc"; int i = StrToInt(s);

若是String类型有一个名为ToInt()(从字符串转为数值)的方法,就可以这样调用了

?string s = "abc"; int i = s.ToInt();

这样看起来是不是更好,下面来看看具体怎么实现吧

第一步:

我先创建一个解决方案,一个web应用程序(webtest)及一个类库(W.Common)

在webtest项目添加引用W.Common项目

第二步:在类库中新建一个名为EString.cs类

 代码如下 复制代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace W.Common
{
    public static class EString
    {
        /// <summary>
        /// 将字符串转换为Int
        /// </summary>
        /// <param name="t"></param>
        /// <returns>当转换失败时返回0</returns>
        public static int ToInt(this string t)
        {
            int id;
            int.TryParse(t, out id);//这里当转换失败时返回的id为0
            return id;
        }
    }
}

看了上面的代码了吧,扩展方法规定类必须是一个静态类,EString是一个静态类,里面包含的所有方法都必须是静态方法。

msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。”

EString里有一个ToInt的静态方法,他接收一个自身参数this,类型为string,this string必须在方法参数的第一个位置。

这句话什么意思,即你需要对string扩展一个ToInt方法,this是string实例化后的对象,这可能说的不太清楚,我的表述能力能弱,不要见怪呀。。。通俗的说就是,扩展方法跟静态类的名称无关,只需要在一个静态类里面定义一个静态方法,第一个参数必须this string开头。

如果需要你要对DateTime类型扩展方法名为IsRange(判断是否在此时间范围内),代码如下:

 代码如下 复制代码

/// <summary>
        /// 此时间是否在此范围内 -1:小于开始时间 0:在开始与结束时间范围内 1:已超出结束时间
        /// </summary>
        /// <param name="t"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static int IsRange(this DateTime t, DateTime startTime, DateTime endTime)
        {
            if (((startTime - t).TotalSeconds > 0))
            {
                return -1;
            }
 
            if (((endTime - t).TotalSeconds < 0))
            {
                return 1;
            }
 
            return 0;
        }

这里的扩展方法是用this DateTime打头,那么就可以这样调用

time.IsRange(t1,t2);//判断时间time是否在t1到t2的范围内

当前代码在使用扩展方法前需要先引用命名空间

 代码如下 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using W.Common;//这里引用扩展方法所在的命名空间
 
namespace webtest
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            use1();
            Response.Write("<br />");
            use2();
        }
 
        /// <summary>
        /// 没有用扩展方法
        /// </summary>
        private void use1()
        {
            string s = "abc";
            int i = StrToInt(s);
            Response.Write("没有用扩展方法:" + i);
        }
 
        /// <summary>
        /// 使用扩展方法
        /// </summary>
        private void use2()
        {
            string s = "2012";
            int i = s.ToInt();
            Response.Write("使用扩展方法:" + i);
        }
 
        public static int StrToInt(string s)
        {
            int id;
            int.TryParse(s, out id);//这里当转换失败时返回的id为0
            return id;
        }
    }
}

好了关于C#的扩展方法我们就讲到了这里,如果有不了解的朋友可以搜索一下

时间: 2024-09-20 18:25:06

asp.net中 C#扩展方法实例的相关文章

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中CSharpThinking 扩展方法

本章主要描述扩展方法的应用及相关原理. 一, 演变 1.1 扩展方法特征 1)必须在一个静态方法中. 2)至少有一个参数. 3)第一个参数必须附加this关键字作为前缀. 4)第一个参数不能有其他任何修饰符(如 out,ref). 5)第一个参数的类型不能是指针. 6) 如果扩展方法名称与类型的方法一样(如都命名为ToString),则只有类型的方法会被调用,而扩展方法的不会,这是一个优先级问题. 1.2 扩展方法与普通静态方法的比较   C#2 时对一个类进行扩展而又不能应用继承方式时,只能编

ASP.NET中发送Email完整实例(转)

asp.net ASP.NET中发送Email完整实例 本文举例说明在ASP.NET中发送Email的众多可能性,内容覆盖了诸如Email格式.优先权.附件及Email编码等方面. ASP.NET被赋予了一个发送Email的新对象,名为SmtpMail.使用SmtpMail对象从ASP.NET页面中发送Email时,可以遵循以下简单步骤: ▲包含与邮件有关类所需要的名称空间:▲例示一个信息对象,设置属性:▲使用SmtpMail对象实例的send方法发送邮件. 现在我们就来一步一步地研究从一个AS

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

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

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

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

jQuery中ajax - get() 方法实例详解_AJAX相关

在jquery中使用get,post和ajax方法给服务器端传递数据,在上篇文章给大家分享了jquery中ajax-post()方法实例,下面通过本文继续学习jQuery中ajax - get() 方法,具体介绍请看下文. jQuery Ajax 参考手册 实例 使用 AJAX 的 GET 请求来改变 div 元素的文本: $("button").click(function(){ $.get("demo_ajax_load.txt", function(resul

jQuery中ajax - get() 方法实例详解

在jquery中使用get,post和ajax方法给服务器端传递数据,在上篇文章给大家分享了jquery中ajax-post()方法实例,下面通过本文继续学习jQuery中ajax - get() 方法,具体介绍请看下文. jQuery Ajax 参考手册 实例 使用 AJAX 的 GET 请求来改变 div 元素的文本: $("button").click(function(){ $.get("demo_ajax_load.txt", function(resul