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

本文关键字:标识符 声明 为什么 | 更新日期: 2023-09-27 17:57:06

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

public delegate void myDelegate(int x, int y);  

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

public delegate void myDelegate(int, int)

它显示一个编译时错误,指出identifier expected

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

public delegate void firstDelegate(int);

public delegate void secondDelegate(int, int);

是区分它们的充分和明确的声明。我认为如此

我想你们得到了我??

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

它可以在调用时产生影响。例如:

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

两行的输出都x=5, y=10,因为参数使用名称而不是位置。尽管 C# 只在 C# 4 中获得了命名参数,但 VB.NET 拥有它们的时间要长得多。

当然,现在不必那样。本来可以设计成委托一开始就没有命名参数 - 但是当你调用的其他所有东西都有命名参数时,你为什么要让委托变得不同呢?

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

请注意,参数名称有助于提高可读性,并且也允许更轻松地记录参数。