为什么在声明委托时需要标识符?

Man*_*bey 4 c#

当我们在C#中创建委托时,为了指向具有明确签名(参数集)的函数,它要求我们为每种类型指定标识符.

public delegate void myDelegate(int x, int y);  
Run Code Online (Sandbox Code Playgroud)

如果我尝试将此原型声明写为:

public delegate void myDelegate(int, int)
Run Code Online (Sandbox Code Playgroud)

它显示编译时错误说identifier expected.

但据我所知,当我们只是为方法指定原型时,为什么编译器需要一个标识符来区分具有不同签名的两个方法:

public delegate void firstDelegate(int);
Run Code Online (Sandbox Code Playgroud)

和

public delegate void secondDelegate(int, int);
Run Code Online (Sandbox Code Playgroud)

是区分它们的充分而明确的声明.我认同

我觉得你们有人帮我?

Jon*_*eet 8

它可以在调用点产生影响.例如:

using System;

class Test
{
    delegate void Foo(int x, int y);

    static void Main()
    {
        Foo foo = (x, y) => Console.WriteLine("x={0}, y={1}", x, y);
        foo(x: 5, y: 10);
        foo(y: 10, x: 5);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出x=5, y=10用于两行,因为参数使用名称而不是位置.尽管C#只在C#4中获得了命名参数,但VB.NET已经使用了更长时间.

当然现在也没有必须要这样.它本来可以设计成代理人首先没有命名参数 - 但是当你调用的其他所有命名参数时,你为什么要让代表不同?

顺便说一下,你会为​​接口方法和抽象方法提出相同的建议吗?同样,声明中没有直接使用参数,因为它们只是签名.

请注意,参数名称在可读性方面有所帮助,并且允许更容易地记录参数.