-2

我有两个功能:

public static string Image(this HtmlHelper helper, string src, string alt)

public static string Image(HtmlHelper helper, string src, string alt)

我想知道this在第一个函数中的作用,为什么在这种情况下我必须把参数this放在第一位?

4

5 回答 5

2

不知道为什么你会被否决。人们需要学习,对吧?

这些是扩展,它们必须进入静态类。

对于您的 HtmlHelper 对象,您可以将其与如下扩展一起使用:

string retString = objHelper.Image(srcString, altString);

如果您没有扩展,则必须编写:

string retString = Image(objHelper, scrString, altString);

它们都产生相同的结果。

于 2013-06-11T14:50:10.097 回答
1

关键字this使其成为针对HtmlHelper该类的扩展方法。这在 MVC 中得到了很多利用,您可以在其中执行诸如@Html.Image使用 Razor 语法之类的操作。你可能会认出这样一个:

@Html.TextBoxFor(...)
于 2013-06-11T14:46:32.147 回答
1

这是一个扩展函数调用。如果将 this 放在第一个参数的前面,则可以调用该方法,就好像它是该参数的函数一样。值得阅读 http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx

他们可以使代码更容易被下一个人阅读

于 2013-06-11T14:47:26.433 回答
1

你有这个功能:

public static string Image(this HtmlHelper helper, string src, string alt);

这是HtmlHelper 类实例的扩展方法

扩展方法是一种特殊的static方法,但它们被调用时就好像它们是扩展类型上的实例方法一样。

  • 方法的第一个参数指定方法操作的类型;
  • 它必须以this修饰符开头,因为它是扩展方法。

来自 MSDN,“this 关键字指的是类的当前实例,也用作扩展方法的第一个参数的修饰符。”

于 2013-06-11T14:50:17.417 回答
0

感谢你们。这个例子清除了一切:

public static bool BiggerThan(this string theString, int minChars)
{
  return (theString.Length > minChars);
}

您可以轻松地在字符串对象上使用它:

var isBigger = "my string is bigger than 20 chars?".BiggerThan(20);
于 2013-06-11T15:03:38.800 回答