gpt4 book ai didi

c# - 为什么在声明委托(delegate)时需要标识符?

转载 作者:太空狗 更新时间:2023-10-30 00:31:47 30 4
gpt4 key购买 nike

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

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

如果我尝试将这个原型(prototype)声明写成:

public delegate void myDelegate(int, int)

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

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

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 has had them for much longer .

现在当然不必那样。它可以被设计成让委托(delegate)首先没有命名参数——但是当你调用的所有else都有命名参数时,你为什么要让委托(delegate)不一样?

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

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

关于c# - 为什么在声明委托(delegate)时需要标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22899714/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com