以下是我在c#...
中的代码using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
TestPointer test = new TestPointer();
test.function1(function2); // Error here: The name 'function2' does not exist in current context
}
}
class TestPointer
{
private delegate void fPointer(); // point to every functions that it has void as return value and with no input parameter
public void function1(fPointer ftr)
{
fPointer point = new fPointer(ftr);
point();
}
public void function2()
{
Console.WriteLine("Bla");
}
}
如何通过在main函数中传递函数引用来调用回调函数?... 我是c#
的新手答案 0 :(得分:3)
test.function1(test.function2)
应该这样做。
您还需要
public delegate void fPointer();
而不是
private delegate void fPointer();
答案 1 :(得分:1)
你可以用一个动作来做到这一点:
class Program
{
static void Main(string[] args)
{
TestPointer test = new TestPointer();
test.function1(() => test.function2()); // Error here: The name 'function2' does not exist in current context
Console.ReadLine();
}
}
class TestPointer
{
private delegate void fPointer(); // point to every functions that it has void as return value and with no input parameter
public void function1(Action ftr)
{
ftr();
}
public void function2()
{
Console.WriteLine("Bla");
}
}
答案 2 :(得分:1)
您的代码有两个问题:
TestPointer test = new TestPointer();
test.function1(function2);
这里,范围内没有名为function2
的变量。你想要做的就是这样称呼:
test.function1(test.function2);
test.function2
实际上是method group,在这种情况下,编译器会将其转换为委托。关于下一个问题:
private delegate void fPointer();
public void function1(fPointer ftr)
您将委托声明为私有。它应该是公开的。一个delegate is a special kind of type,但它仍然是一个类型(你可以声明'em的变量,这正是你将参数声明为function1
时所做的)。当声明为private时,类型在类TestPointer
外部不可见,因此不能用作公共方法的参数。
最后,并非真正的错误,但您可以简化调用委托的方式:
ftr();
所以这是你的更正代码:
using System;
class Program
{
static void Main(string[] args)
{
TestPointer test = new TestPointer();
test.function1(test.function2);
}
}
class TestPointer
{
public delegate void fPointer();
public void function1(fPointer ftr)
{
ftr();
}
public void function2()
{
Console.WriteLine("Bla");
}
}
答案 3 :(得分:0)
您需要function2
static
或通过text.function2
。