web api中函数参数中的“this”

时间:2014-06-27 11:52:38

标签: c# asp.net-mvc-4 this asp.net-web-api

我正在开发web api,我们已经创建了HtmlLHelper类,我看到的声明如下:

public static string GetCountryDomain(this System.Web.Mvc.HtmlHelper htmlHelper, Area area)
    {
        //body
    }

在我的控制器中我想调用上面的功能。它需要2个参数。

HtmlHelper.GetCountryDomain(area_id);

有人可以解释为了调用上面的函数需要传递的第一个参数吗?

5 个答案:

答案 0 :(得分:1)

this关键字标记了一种扩展方法。有两种方法可以调用它:

  • 您可以将其称为HtmlHelper
  • 上的实例方法
  • 您可以将其称为传递两个参数的普通static方法。

第一种方式更常见(毕竟,这是使方法成为扩展的重点)

// Prepare the parameters
HtmlHelper helper = ...
Area area = ...
// Call the function
string countryDomain = helper.GetCountryDomain(area);

答案 1 :(得分:1)

这是一种扩展方法。您可以正常调用它,在这种情况下,您需要将一个System.Web.Mvc.HtmlHelper实例和一个int传递给静态方法。由于它是静态方法,因此您还需要指定类:

Area area = HtmlHelperExtensions.GetAreaById(htmlHelper, i);

但也可以调用扩展方法,就好像它们是第一个参数的实例方法:

Area area = htmlHelper.GetAreaById(i);

这只是语法糖;实际发生的事情是第一次电话会议。欲获得更多信息: http://msdn.microsoft.com/en-us/library/bb383977.aspx

答案 2 :(得分:0)

GetAreaById是一种扩展方法。所以第一个参数已经是HtmlHelper

答案 3 :(得分:0)

你写了一个扩展方法。语法旨在模仿将方法添加到现有类。您将传递HtmlHelper对象作为第一个参数。

http://msdn.microsoft.com/en-us/library/bb383977.aspx

您可以在视图中使用此特定类型的帮助程序类。

You can use the HtmlHelper class in a view by using the built-in 
Html property of the view. For example, calling @Html.ValidationSummary()
renders a summary of validation messages. 

http://msdn.microsoft.com/en-us/library/system.web.mvc.htmlhelper(v=vs.118).aspx

答案 4 :(得分:0)

GetAreaByIdExtension Method。您可以将其视为附加的方法"到特定类型的实例,但未在该类型的定义中定义。

此外,作为静态方法,它可以以两种方式使用:

作为this关键字

前面的类型的实例方法
var helper = new System.Web.Mvc.HtmlHelper();
var area = helper.GetAreaById(id);

通过将实例作为参数传递为静态方法:

var helper = new System.Web.Mvc.HtmlHelper();
var area = ClassWhereMethodIsDefined.GetAreaById(helper, id);