从主函数回调

时间:2012-09-18 10:59:49

标签: c#

以下是我在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#

的新手

4 个答案:

答案 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