首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当"this“用作方法参数的前缀时,是什么意思?

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

Stack Overflow用户
提问于 2009-06-09 20:52:26
回答 5查看 790关注 0票数 6

我确信答案是显而易见的,我有点尴尬,因为我还没有真正知道答案,但考虑一下我在阅读“专业ASP.NET MVC1.0”时拿到的以下代码样本:

代码语言:javascript
运行
复制
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“这个词在方法签名中的作用是什么。有谁能开导我吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-09 20:53:20

这是一个称为extension method的C# 3.0新特性。

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

代码语言:javascript
运行
复制
yourModelStateDictionary.AddRuleViolations( errors );

看,第一个参数(‘this’-参数)被跳过了。它只将ModelStateDictionary指定为您的扩展方法的有效目标。

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

票数 17
EN

Stack Overflow用户

发布于 2009-06-09 20:54:13

这意味着所讨论的方法是“扩展方法”,可以像调用类本身的方法一样调用它。请参阅此article

票数 1
EN

Stack Overflow用户

发布于 2009-06-09 20:54:30

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

来自MSDN。

扩展方法使您能够将方法“添加”到现有类型中,而无需创建新的派生类型、重新编译或修改原始类型。扩展方法是一种特殊的静态方法,但它们被调用时就好像它们是扩展类型上的实例方法一样。对于用C#和Visual Basic编写的客户端代码,调用扩展方法与在类型中实际定义的方法没有明显区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/972433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档