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

强颜欢笑 提交于 2019-11-27 03:10:40

问题


This question already has an answer here:

  • What are Extension Methods? 11 answers
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:

  • Well-documented reference would be: How to: Implement and Call a Custom Extension Method (C# Programming Guide)

  • More particular reference about Extention Methods in ASP.NET MVC would be: How To Create Custom MVC Extension Methods




回答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.



来源:https://stackoverflow.com/questions/15035330/what-does-this-keyword-mean-in-a-method-parameter

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