我确信答案是显而易见的,我有点尴尬,因为我还没有真正知道答案,但考虑一下我在阅读“专业ASP.NET MVC1.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“这个词在方法签名中的作用是什么。有谁能开导我吗?
发布于 2009-06-09 20:53:20
这是一个称为extension method的C# 3.0新特性。
这意味着,您向ModelStateDictionary对象添加了一个新方法。您可以像调用普通方法一样调用它:
yourModelStateDictionary.AddRuleViolations( errors );看,第一个参数(‘this’-参数)被跳过了。它只将ModelStateDictionary指定为您的扩展方法的有效目标。
线索是,您可以使用任何类-甚至是密封类或第三方类,如.Net框架类(例如对象或字符串)来实现此目的。
发布于 2009-06-09 20:54:13
这意味着所讨论的方法是“扩展方法”,可以像调用类本身的方法一样调用它。请参阅此article。
发布于 2009-06-09 20:54:30
这是一个扩展方法签名,这意味着"AddRuleViolations“将被视为ModelStateDictionary的扩展方法。
来自MSDN。
扩展方法使您能够将方法“添加”到现有类型中,而无需创建新的派生类型、重新编译或修改原始类型。扩展方法是一种特殊的静态方法,但它们被调用时就好像它们是扩展类型上的实例方法一样。对于用C#和Visual Basic编写的客户端代码,调用扩展方法与在类型中实际定义的方法没有明显区别。
https://stackoverflow.com/questions/972433
复制相似问题