C#是否允许在其方法中省略类参数?

时间:2016-09-16 21:13:22

标签: c# class

当我清理项目的代码时,我偶然发现了类中的一个方法,如下(简化)

@Resource
public Environment env;

执行快速搜索后,除了定义之外,搜索结果给了我以下内容:

public static class HelperClass
{
   public static void DoStuff(this DifferentClassName obj)
}

显然,我认为它与类中的方法没有任何关系,所以我注释掉了类方法,看看它是否会导致任何错误。令我惊讶的是,搜索结果中的行被删除了。

搜索结果行的片段如下:

varname.DoStuff();

我最初认为这是因为创建了一个新的类实例,但它不应该仍然是该行中的参数吗?任何人都可以解释为什么这些方法相互联系,而方法调用中的参数被省略了吗?

1 个答案:

答案 0 :(得分:4)

(this Foo foo)的方法是 extension methods 。扩展方法具有适用的某些规则(提供的读链接)。

当这些方法属于适当的静态类时 - 例如publicinternal - 作为扩展方法主题的任何对象实际上都有加载到其API的方法。然后将主题对象假定为第一个参数。

您可以通过两种方式调用扩展方法:

// assuming extension class as follows
public static class Extensions {
    // Foo is the subject Type and foo the subject object
    public static void DoBarWithFoo(this Foo foo){
        // do something with foo
    }
}

var foo = new Foo();

// call ...
foo.DoBarWithFoo();
// or ...
Extensions.DoBarWithFoo(foo);