gpt4 book ai didi

c# - 是否可以在多个级别上传递委托(delegate)?

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:14 25 4
gpt4 key购买 nike

我想做这样的事情:

class A
{
void Print(string message)
{
Console.WriteLine("Hi!");
}
B.Method1(Print);

}

class B
{
delegate void Print(string message);

void Method1(Print PrintOutput)
{
C.Method2(PrintOutput);
}
}

class C
{
delegate void Print(string message);

void Method2(Print PrintOutput)
{
PrintOutput("Bye!");
}
}

我尝试这样做的原因是我的第一个类 (A) 是 WinForms 应用程序中的一个类,它调用来自不同项目的类的方法,但在同一个解决方案中,它反过来调用另一个来自同一解决方案中另一个类(同样是不同项目)的方法。我想从类 C 调用类 A 中的方法。

如果我尝试按照上面写的方式执行此操作,我会在类 B 中收到编译错误,指出此方法的最佳重载匹配有一些无效参数。

最佳答案

您收到错误消息是因为您声明了两个具有相同签名的不同委托(delegate)类型,然后您尝试访问 C.Method2与在 class B 中声明的委托(delegate)一起

为避免这种情况,您必须显式声明在类 B 中接受委托(delegate)类型类型为 C :

public void Method1(C.Print PrintOutput)
{
var C = new C();
C.Method2(PrintOutput);
}

或者,更好的方法是接受通用的 Action<string>而不是创建自己的:

class B
{
public void Method1(Action<string> PrintOutput)
{
var C = new C();
C.Method2(PrintOutput);
}
}

class C
{
public void Method2(Action<string> PrintOutput)
{
PrintOutput("Bye!");
}
}

关于c# - 是否可以在多个级别上传递委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26101843/

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