“this”关键字在方法参数中的含义是什么?

时间:2013-02-23 00:05:26

标签: c# extension-methods html-helper

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方法中第一个参数前面的'this'对象似乎不被接受为参数。在真正的BeginForm方法中看起来像:

BeginForm(string actionName, string controllerName);

省略第一个参数。但它实际上以隐藏的方式以某种方式接收第一个参数。 能告诉我这个结构是如何工作的吗?我实际上正在探索MVC 4互联网示例。 谢谢。

2 个答案:

答案 0 :(得分:30)

这是扩展方法在C#中的工作方式。扩展方法功能允许您使用自定义方法扩展现有类型。 方法参数上下文中的this [TypeName]关键字是您希望使用自定义方法扩展的typethis用作前缀,在您的情况下,HtmlHelper }是要扩展的typeBeginForm是应该扩展它的方法。

看一下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);

参考文献:

答案 1 :(得分:3)

扩展方法:

扩展现有类型的“bolt on”方式。它们允许您使用新功能扩展现有类型,而无需子类或重新编译旧类型。例如,您可能想知道某个字符串是否为数字。或者您可能希望ASP.net WebForms中的Show()Hide()功能用于控件。

例如:

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);
    }
}

修改 有关更多信息,您可以在{@ 3}找到MSDN文档,该文档由@aush友情链接。

我喜欢阅读关于扩展方法的“C#In Depth”。这里有摘录: http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx

你当然可以在线购买这本书,或者你可以使用谷歌对它们如何运作进行一些研究。