单个委托(delegate)如何指向具有不同签名的多个函数?
假设我有两个签名不同的函数。
private int Add(int x,int y)
{
return (x+y);
}
private int MultiplyByTwo(int x)
{
return (x*2);
}
请告诉我是否可以使用单个委托(delegate)来同时指向添加和多个两个不同的函数,函数将根据参数调用。
请讨论代码并告诉我如何使用 func<> 委托(delegate)执行相同的工作。
谢谢
这是不可能的。委托(delegate)的要点是充当强类型函数指针(松散地放置),运行时也不会根据参数对应该调用什么进行任何猜测。如果这是您正在寻找的功能类型,您可能会对 C# 4 中的 dynamic
关键字感兴趣。
所有委托(delegate)都继承自一个名为 Delegate
的通用委托(delegate),如果这是您正在寻找的功能的话。
static void Main(string[] args)
{
Delegate method1 = new Action<string>(PrintOneString);
Delegate method2 = new Action<string, string>(PrintTwoString);
method1.DynamicInvoke("Hello");
method2.DynamicInvoke("Hello", "Goodbye");
}
public static void PrintOneString(string str)
{
Console.WriteLine(str);
}
public static void PrintTwoString(string str1, string str2)
{
Console.WriteLine(str1);
Console.WriteLine(str2);
}