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方法中看起来像:
BeginForm(string actionName, string controllerName);
省略第一个参数。但它实际上以隐藏的方式以某种方式接收第一个参数。 能告诉我这个结构是如何工作的吗?我实际上正在探索MVC 4互联网示例。 谢谢。
答案 0 :(得分:30)
这是扩展方法在C#中的工作方式。扩展方法功能允许您使用自定义方法扩展现有类型。
方法参数上下文中的this [TypeName]
关键字是您希望使用自定义方法扩展的type
,this
用作前缀,在您的情况下,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);
参考文献:
详细记录的参考文献是:How to: Implement and Call a Custom Extension Method (C# Programming Guide)
有关ASP.NET MVC中的扩展方法的更多特定参考将是: How To Create Custom MVC Extension Methods
答案 1 :(得分:3)
扩展方法:
扩展现有类型的“bolt on”方式。它们允许您使用新功能扩展现有类型,而无需子类或重新编译旧类型。例如,您可能想知道某个字符串是否为数字。或者您可能希望ASP.net WebForms中的Show()Hide()功能用于控件。
例如:
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);
}
}
修改强> 有关更多信息,您可以在{@ 3}找到MSDN文档,该文档由@aush友情链接。
我喜欢阅读关于扩展方法的“C#In Depth”。这里有摘录: http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx
你当然可以在线购买这本书,或者你可以使用谷歌对它们如何运作进行一些研究。