可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
This question already has an answer here:
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); ... } }
I have noticed that 'this' object in front of the first parameter in BeginForm method doesn't seem to be accepted as a parameter. Looks like in real BeginForm methods functions as:
BeginForm(string actionName, string controllerName);
omitting the first parameter. But it actually receives that first parameter somehow in a hidden way. Can you please explain me how this structure works. I actually exploring MVC 4 internet Sample. Thank you.
回答1:
This is how extension methods works in C#. The Extension Methods feature allowing you to extend existing types with custom methods. The this [TypeName]
keyword in the context of method's parameters is the type
that you want to extend with your custom methods, the this
is used as a prefix, in your case, HtmlHelper
is the type
to extend and BeginForm
is the method which should extend it.
Take a look at this simple extention method for the string
type:
public static bool BiggerThan(this string theString, int minChars) { return (theString.Length > minChars); }
You can easily use it on string
object:
var isBigger = "my string is bigger than 20 chars?".BiggerThan(20);
References:
回答2:
Extension Methods:
A "bolt on" way to extend an existing type. They allow you to extend an existing type with new functionality, without having to sub-class or recompile the old type. For instance, you might like to know whether a certain string was a number or not. Or you might want to have the Show() Hide() functionality in ASP.net WebForms for controls.
For Example:
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); } }
Edit: For futher information you can see the MSDN documentation at: http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx which was kindly linked by @aush.
I enjoyed reading "C# In Depth" regarding Extension Methods. There is an excerpt available here: http://my.safaribooksonline.com/book/programming/csharp/9781935182474/extension-methods/ch10lev1sec3
You can of course buy the book online or you can just do some research into how it all works under the hood using Google.