What does 'this' keyword mean in a method parameter? [duplicate]

匿名 (未验证) 提交于 2019-12-03 01:06:02

问题:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!