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方法的第一个参数的前面“这个”对象似乎不被接受作为参数。 看起来像真正的BeginForm方法的功能:
BeginForm(string actionName, string controllerName);
省略第一参数。 但它实际上收到第一个参数莫名其妙地在一个隐藏的方式。 能否请您给我解释一下这个结构是如何工作的。 其实我探索MVC 4互联网样品。 谢谢。
这是扩展方法如何在C#。 扩展方法的功能,让你用自定义的方法扩展现有类型。 在this [TypeName]
在方法的参数上下文关键字的type
要与您的自定义方法扩展,在this
作为前缀,你的情况, HtmlHelper
是type
扩展和BeginForm
是应该的方法扩展它。
看看在这个简单的方法extention 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);
参考文献:
扩展方法:
方式A“上螺栓”扩展现有类型。 它们允许你使用扩展新功能的现有类型,而无需子类或重新编译旧的类型。 例如,你可能想知道某个字符串是否是一个数字或没有。 或者你可能想在ASP.net的WebForms为控制显示()隐藏()功能。
例如:
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);
}
}
编辑:获得进一步的信息,您可以看到在MSDN文档: http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx这是好心的@aush链接。
我很喜欢读“C#详解”关于扩展方法。 有一个可用的摘录在这里: http://my.safaribooksonline.com/book/programming/csharp/9781935182474/extension-methods/ch10lev1sec3
当然,你可以在网上买的书或者你可以做一些研究,它的引擎盖下的所有作品如何使用谷歌。