当用作方法参数的前缀时,"this"是什么意思?

Sco*_*son 6 c# extension-methods language-features

我确定答案是显而易见的,我有点不好意思我已经不知道答案,但考虑一下我在阅读"Professional 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解这个静态方法正在做什么,但我不明白的是"this"这个词在方法签名中的用途是什么.任何人都可以开导我吗?

tan*_*ius 17

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

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

yourModelStateDictionary.AddRuleViolations( errors );
Run Code Online (Sandbox Code Playgroud)

请注意,跳过第一个参数('this'参数).它仅将ModelStateDictionary指定为扩展方法的有效目标.

线索是,您可以使用任何类 - 甚至密封或第三方类,如.Net框架类(例如对象或字符串).