【问题标题】:Using of word this in the parameters of a function [duplicate]在函数的参数中使用这个词[重复]
【发布时间】:2013-06-11 14:44:41
【问题描述】:

我有两个功能:

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

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

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

【问题讨论】:

标签: c# .net html-helper


【解决方案1】:

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

那些是扩展,它们必须进入一个静态类。

对于您的 HtmlHelper 对象,您可以将它与这样的扩展一起使用:

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

如果你没有扩展,你必须写:

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

它们都产生相同的结果。

【讨论】:

  • 因为人们在询问之前也需要搜索。同一个问题已经被问过多次了。
  • 如果您不知道 this 关键字是用于扩展,您会搜索什么? this 带来了很多点击。
  • 只要在谷歌上搜索“c# this keyword parameter”或“c# this keyword method”之类的东西,你就会发现大量关于扩展方法的答案和链接。很容易找到答案,而且比写一个问题要快。
【解决方案2】:

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

@Html.TextBoxFor(...)

【讨论】:

  • 谁是一个不赞成的答案,然后立即撤消反对?当你选择否决答案时要负责任,不要一时兴起。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    你有这个功能:

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

    这是 HtmlHelper 类实例上的 Extension Method

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

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

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

    【讨论】:

    • 在粗体中,您说这两个定义都是扩展方法,但您的文本随后指出扩展方法必须以 this 修饰符开头。一些澄清会有所帮助。
    • @jp2code 对不起我的错..更正它...感谢您指出。
    • @Downvoter:想发表评论吗?
    • 我没有看到反对票,只有一个 (+1) 和零 (-1)。也许他们把它拿走了。
    【解决方案5】:

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

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

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

    var isBigger = "my string is bigger than 20 chars?".BiggerThan(20);
    

    【讨论】:

    • 是的,它对字符串很方便。但它还有很多其他用途。如果您需要一些示例,只需查看 Linq 库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 2022-12-25
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多