“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
是要扩展的type
, BeginForm
是应该使用的方法扩展它。
看看这个简单的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
你当然可以在线购买这本书,或者你可以使用谷歌对它们如何在幕后工作进行一些研究。