Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C是否允许在其方法中省略类参数?_C#_Class - Fatal编程技术网

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

C# C是否允许在其方法中省略类参数?,c#,class,C#,Class,当我为我的项目清理代码时,我偶然发现了类中的一个方法,如下所示 public static class HelperClass { public static void DoStuff(this DifferentClassName obj) } 在执行快速搜索后,除了定义之外,搜索结果还提供了以下信息: varname.DoStuff(); var varname = new DifferentClassName() { //stuff inside } varname.D

当我为我的项目清理代码时,我偶然发现了类中的一个方法,如下所示

public static class HelperClass
{
   public static void DoStuff(this DifferentClassName obj)
}
在执行快速搜索后,除了定义之外,搜索结果还提供了以下信息:

varname.DoStuff();
var varname = new DifferentClassName()
{
    //stuff inside
}

varname.DoStuff(); //<==what about parameter??
显然,我认为它与类中的方法没有任何关系,所以我注释掉了类方法,以便查看它是否会导致任何错误。令我惊讶的是,搜索结果中的一行被涂红了

搜索结果行的代码段如下所示:

varname.DoStuff();
var varname = new DifferentClassName()
{
    //stuff inside
}

varname.DoStuff(); //<==what about parameter??
我最初认为这是因为创建了一个新的类实例,但它不应该仍然是相关行中的一个参数吗?有人能解释一下为什么这些方法相互关联,而方法调用中的参数被省略了吗?

使用这个Foo-Foo的方法是。扩展方法具有应用提供的读取链接的特定规则

当这些方法位于适当的静态类中时(例如public或internal),作为扩展方法主题的任何对象本质上都将该方法附加到其API上。然后将subject对象假定为第一个参数

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

// 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);

它是一种特殊类型的方法,称为扩展方法。您可以研究它们,但您可以确定它是一个,因为它是1静态类中的一个静态方法2在其第一个参数上使用this关键字。@TamasHegedus当它回答我的问题时,我不知道实际的方法。它仍然会被标记为重复吗?因为它将有相同的潜在答案,但不要担心。你在这里也已经有了答案,你的问题仍然可以向上投票。那么,它是否类似于Javascript,比如说,你有5个参数的函数,你用3个参数调用函数,它只假设前3个参数的值?不,这完全不同,请检查IAbstract提供的扩展方法链接