What does 'this' keyword mean in a method parameter?

13,437

Solution 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:

Solution 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.

Share:
13,437

Related videos on Youtube

InGeek
Author by

InGeek

Updated on October 22, 2022

Comments

  • InGeek
    InGeek over 1 year
    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.

  • InGeek
    InGeek about 11 years
    that is very neat explanation, thank you
  • Yair Nevet
    Yair Nevet about 11 years
    @INgeeg You're welcome!
  • thatWiseGuy
    thatWiseGuy over 6 years
    @YairNevet Does the method need to be declared as static for this to work?
  • Yair Nevet
    Yair Nevet over 6 years
    @thatWiseGuy yes, it is