当作为方法参数前缀时,“this”代表什么意思?

7

我相信答案是显而易见的,我有点尴尬,因为我还不知道答案,但请考虑我在阅读《专业ASP.NET MVC 1.0》时学到的以下代码示例:

public static class ControllerHelpers
{
    public static void AddRuleViolations(this ModelStateDictionary modelState, IEnumerable<RuleViolation> errors)
    {
        foreach (RuleViolation issue in errors)
            modelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
    }
}

我理解这个静态方法在做什么,但我不明白的是方法签名中的单词"this"有什么作用。 有人可以给我解释一下吗?

5个回答

17

这是 C# 3.0 的一个新功能,称为扩展方法

它意味着,您可以向 ModelStateDictionary 对象添加新方法。您可以像普通方法一样调用它:

yourModelStateDictionary.AddRuleViolations( errors );
看到了吗,第一个参数(即'this'参数)被省略了。它只是为你的扩展方法分配了ModelStateDictionary作为有效目标。
关键在于,你可以对任何类执行此操作 - 甚至是密封的或第三方类,例如.Net框架类(例如object或string)。

我自己也无法表达得更好。 - TWith2Sugars

1
它意味着所讨论的方法是一个“扩展方法”,可以像类本身的方法一样调用。请参见此文章

1

这是一个扩展方法的签名,它意味着"AddRuleViolations"将被视为ModelStateDictionary的扩展方法。

来自MSDN。

扩展方法使您能够在不创建新的派生类型、重新编译或以其他方式修改原始类型的情况下,向现有类型中"添加"方法。扩展方法是一种特殊的静态方法,但它们被调用时就像是在扩展类型上的实例方法一样。对于使用C#和Visual Basic编写的客户端代码,调用扩展方法与实际在类型中定义的方法之间没有明显区别。


0

0
它会为所有的ModelStateDictionary实例添加一个扩展方法

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接