IT技术学习网
IT技术学习网
您的位置: 主页 > 编程技术 > c# >

c# 扩展方法的理解

2014-12-27 18:55 来源: 整理 阅读:

理解扩展方法

扩展方法的概念对于使用过JavaScript(考虑prototype)的人来说,也应该是非常熟悉的。

使用扩展方法,你可以向一个已有类中添加新的方法。例如,你可以创建任意一个方法,并将它添加到String类中。

由于害怕JavaScript注入攻击,我一直以来都对字符串进行HTML编码。在.NET Framework 2.0中,可以调用静态方法Server.HtmlEncode()来对字符串进行HTML编码,如下,

string evilString = “<script>alert(‘boom!’)<” + “/script>”;

ltlMessage.Text = Server.HtmlEncode(evilString);

在这段代码中,调用了Server类中的静态方法HtmlEncode()。如果我们可以向下面这样,直接调用字符串的HtmlEncode()方法,岂不妙哉

string evilString = “<script>alert(‘boom!’)<” + “/script>”;

ltlMessage.Text = evilString.HtmlEncode();

使用扩展方法,就可以这么做。我们可以向喜欢的类中添加任何方法。创建扩展方法,首先要创建一个静态类,并创建一个第一个参数为特殊参数的静态方法。代码清单18-9向String类中添加HtmlEncode()方法,以此描述了如何创建扩展方法。

代码清单 18-9 LanguageChanges\MyExtensions.vb[2]

public static class MyExtensions
{
public static string HtmlEncode(this string str)
{
return System.Web.HttpUtility.HtmlEncode(str);
}
}

注意,HtmlEncode()方法中仅有的参数前面多了关键字this。这样的参数指明了扩展方法所应用的类型。

在VB.NET中创建扩展方法与在C#中极为类似。代码清单18-10中的HtmlEncode()方法与上面的功能相同。

代码清单 18-10 LanguageChanges\MyExtensions.cs[3]

Imports System.Runtime.CompilerServices
Public Module MyExtensions
<Extension()> _
Public Function HtmlEncode(ByVal str As String) As String
Return System.Web.HttpUtility.HtmlEncode(str)
End Function
End Module

当使用VB.NET时,必须将扩展方法声明在一个module中。另外,还必须标记为System.Runtime.CompilerServices.Extension属性。

c# 扩展方法的理解
转载需注明出处:IT技术学习网 http://www.itjsxx.com/csharp/961.html

评论文章 c# 扩展方法的理解
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
IT技术学习网 - 关于我们 - 联系我们 - 版权声明 - 网站地图