我试过了:
class Program
{
public delegate int add(int x, int y);
public class ff
{
public static int addNumbers(int x, int y)
{
return x + y;
}
public static int substractNumbers(int x, int y)
{
return x - y;
}
static void Main(string[] args)
{
Delegate delegare = new add(ff.addNumbers);
Console.WriteLine(delegare(3,4));
}
}
我不明白为什么我收到此错误“预期的方法名称”。 当我使用具有void函数的委托时,它可以工作。 有人能帮助我吗?
答案 0 :(得分:3)
delegare
变量的类型仅为Delegate
。这可以指任何委托。为了调用委托(以正常方式),您应该有一个适当类型的表达式。
修复命名约定并删除不必要的嵌套类 - 并演示方法组转换 - 您的代码如下所示:
using System;
public delegate int Int32Operation(int x, int y);
class Program
{
public static int AddNumbers(int x, int y)
{
return x + y;
}
public static int SubtractNumbers(int x, int y)
{
return x - y;
}
static void Main(string[] args)
{
Int32Operation op = new Int32Operation(AddNumbers);
Console.WriteLine(op(3, 4)); // Prints 7
op = SubtractNumbers; // Method group conversion
Console.WriteLine(op(3, 4)); // Prints -1
}
}
答案 1 :(得分:0)
你应该尝试一下:
add delegare = new add(ff.addNumbers);
您委托的类型应为add
,因为您已定义。