我确定答案是显而易见的,我有点不好意思我还不知道答案,但请考虑下面的代码示例,我在阅读“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);
}
}
我理解这个静态方法正在做什么,但我不明白的是“this”这个词在方法签名中的用途是什么。谁能开导我?
答案 0 :(得分:17)
这是一个名为extension method的新C#3.0功能。
这意味着,您向ModelStateDictionary对象添加了一个新方法。您可以像普通方法一样调用它:
yourModelStateDictionary.AddRuleViolations( errors );
请注意,跳过第一个参数('this'参数)。它只将ModelStateDictionary指定为扩展方法的有效目标。
线索是,您可以使用任何类 - 甚至密封或第三方类,例如.Net框架类(例如对象或字符串)来执行此操作。
答案 1 :(得分:1)
这意味着所讨论的方法是一个“扩展方法”,并且可以被调用,就像它是类本身的方法一样。请参阅此article。
答案 2 :(得分:1)
这是一个扩展方法签名,它意味着“AddRuleViolations”将被视为ModelStateDictionary的扩展方法。
来自MSDN。
扩展方法可让您“添加” 现有类型 没有的方法 创建一个新的派生类型, 重新编译或以其他方式修改 原始类型。扩展方法 是一种特殊的静态方法, 但他们被称为好像他们一样 扩展类型的实例方法。 对于用C#编写的客户端代码 Visual Basic,没有明显的 呼叫之间的区别 扩展方法和方法 实际上是在一个类型中定义的。
答案 3 :(得分:0)
答案 4 :(得分:0)
它向ModelStateDictionary的所有实例添加extension method。