“this”关键字在方法参数中的含义是什么?

namespace System.Web.Mvc.Html { // Summary: // Represents support for HTML in an application. public static class FormExtensions { public static MvcForm BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName); ... } } 

我注意到在BeginForm方法的第一个参数前面的’this’对象似乎不被接受为参数。 看起来在真正的BeginForm方法中的function如下:

 BeginForm(string actionName, string controllerName); 

省略第一个参数。 但它实际上以隐藏的方式以某种方式接收第一个参数。 能告诉我这个结构是如何工作的吗? 我实际上在探索MVC 4互联网示例。 谢谢。

这是扩展方法在C#中的工作方式。 扩展方法function允许您使用自定义方法扩展现有类型。 方法参数上下文中的this [TypeName]关键字是您希望使用自定义方法扩展的type ,它用作前缀,在您的情况下, HtmlHelper是要扩展的typeBeginForm是应该使用的方法扩展它。

看看这个简单的string类型的扩展方法:

 public static bool BiggerThan(this string theString, int minChars) { return (theString.Length > minChars); } 

您可以在string对象上轻松使用它:

 var isBigger = "my string is bigger than 20 chars?".BiggerThan(20); 

参考文献:

  • 详细记录的参考文献将是: 如何:实现和调用自定义扩展方法(C#编程指南)

  • 关于ASP.NET MVC中的扩展方法的更具体的参考将是: 如何创建自定义MVC扩展方法

扩展方法:

用于扩展现有类型的“螺栓连接”方式。 它们允许您使用新function扩展现有类型,而无需子类或重新编译旧类型。 例如,您可能想知道某个字符串是否为数字。 或者您可能希望在ASP.net WebForms中为控件提供Show()Hide()function。

例如:

 public static class MyExtensionMethods { public static void Show(this Control subject) { subject.Visible = true; } public static bool IsNumeric(this string s) { float output; return float.TryParse(s, out output); } } 

编辑:有关更多信息,您可以在以下url查看MSDN文档: http : //msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx ,由@aush友情链接。

关于扩展方法,我喜欢阅读“C#In Depth”。 这里有一段摘录: http : //my.safaribooksonline.com/book/programming/csharp/9781935182474/extension-methods/ch10lev1sec3

你当然可以在线购买这本书,或者你可以使用谷歌对它们如何在幕后工作进行一些研究。