c# - 委托(delegate)指向具有不同签名的多个函数

标签 c# delegates

<分区>

单个委托(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);
}

关于c# - 委托(delegate)指向具有不同签名的多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5551362/

相关文章:

ios - 子类作为父类(super class)的委托(delegate)

c# - 哪种 ORM 最适合这里?

ios - 在 didSelectRowAtIndexPath 中动画 NSLayoutConstraint 不起作用

c# - C# 引用类型在方法内存活多久?

c# - 有没有办法为 WinForms .NET 3.5 应用程序中未处理的异常定义操作?

objective-c - 不理解 Cocoa 中的委托(delegate)

c# - 在当前使用访问者模式的 C# (2.0) 中使用委托(delegate)来简化类型安全的抽象语法树

ios - 在 MVVM 中设置委托(delegate)的正确方法

c# - Func<T>.BeginInvoke 是否使用线程池?

c# - C# 应用程序中的 NHibernate,如何管理 session