C#之 VS2008 之 Extension Methods (转)
从ScottGu's Blogs上看到了关于Vs2008中.NET Framework3.5语言(Jeffry Zhao说这是 C#3.0的特性,自己见识太短了)的新特性,其中有一个叫做Extension Methods(http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx)
这功能让我激动不已。它可以为某一类型的变量(如string,int等)添加上我们自己增加的一些“额外”的方法,比如我们自己为一string 类型的的变量strEmail添加上一个IsValidEmailAddress方法,怎么样?这个方法是否心动?原来我们要实现这个功能着实是会费一番功夫,可是如今有了Extension Methods,很简单即可搞定它:
方法如下:
新添加一个静态类,比如代码为:
1
using System;
2
using System.Data;
3
using System.Configuration;
4
using System.Linq;
5
using System.Web;
6
using System.Web.Security;
7
using System.Web.UI;
8
using System.Web.UI.WebControls;
9
using System.Web.UI.WebControls.WebParts;
10
using System.Web.UI.HtmlControls;
11
using System.Xml.Linq;
12
using System.Text.RegularExpressions;
13
14
/// <summary>
15
/// Summary description for MyStaticExtension
16
/// </summary>
17
public static class MyStaticExtension
18
{
19
public static bool IsValidEmailAddress(this string strEmail)
20
{
21
Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
22
return regex.Match(strEmail).Success;
23
}
24
25
public static bool IsBiggerThan10(this int intNumber)
26
{
27
if (intNumber > 10) return true;
28
return false;
29
}
30
}
31
在这个类中有两个静态的方法,其中一个是IsValidEmailAddress(this string strEmail),另外一个是IsBiggerThan10(this int intNumber);
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

注意这两个方法均是静态的,而且你注意到了么,它的参数前都有一个this关键字来修饰,这就是告诉编辑器,要将string类型的变量加上该IsValidEmailAddress方法,将int类型的变量加上IsBiggerThan10的方法。OK,既然准备好了,我们就开始使用它:
首先,因为我们在该工程中只用到了一个命名空间,所以你在使用它的类中可以using MyStaticExention,也可以不using,二者均可
然后我们就可以直接在类中使用了:
1
string strEmail = "aa";
2
strEmail.IsValidEmailAddress();

2

1
int a = 10;
2
bool bl = a.IsBiggerThan10();

2

这个功能真让人振奋!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!