C# “;这”;web api中的函数内参数

C# “;这”;web api中的函数内参数,c#,asp.net-mvc-4,this,asp.net-web-api,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 } 在我的控制器中,我想调用上面的函数。它需要两个参数 HtmlHelper.GetCountryDomain(area_id); 有人能解释一下调用上述函数需要传递的第一个参

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

public static string GetCountryDomain(this System.Web.Mvc.HtmlHelper htmlHelper, Area area)
    {
        //body
    }
在我的控制器中,我想调用上面的函数。它需要两个参数

HtmlHelper.GetCountryDomain(area_id);

有人能解释一下调用上述函数需要传递的第一个参数吗?

这个
关键字标记了一个扩展方法。有两种方式来称呼它:

  • 您可以像调用
    HtmlHelper
    上的实例方法一样调用它,或者
  • 您可以像传递两个参数的普通
    static
    方法一样调用它
第一种方法更常见(毕竟,这就是将该方法作为扩展的意义所在)


GetAreaById
是一种扩展方法。因此,第一个参数已经是
HtmlHelper

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

Area area = HtmlHelperExtensions.GetAreaById(htmlHelper, i);
但也可以调用扩展方法,就好像它们是第一个参数的实例方法一样:

Area area = htmlHelper.GetAreaById(i);
var helper = new System.Web.Mvc.HtmlHelper();
var area = ClassWhereMethodIsDefined.GetAreaById(helper, id);    
这只是语法上的糖;现实中发生的是第一个电话。有关更多信息:
您编写了一个扩展方法。该语法旨在模拟向现有类添加方法。您将传递一个
HtmlHelper
对象作为第一个参数

此特定类型的帮助器类在您的视图中可用

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. 

GetAreaById
是一个。您可以将其视为“附加”到特定类型实例的方法,但不在该类型的定义中定义

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

作为前面带有
this
关键字的类型的实例方法

var helper = new System.Web.Mvc.HtmlHelper();
var area = helper.GetAreaById(id);
作为静态方法,将实例作为参数传递:

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

你好我稍微修改了我的函数。请看一看,这家伙总是解释得很清楚: