3

以下は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");
    }
}

メイン関数で関数参照を渡してコールバック関数を呼び出すにはどうすればよいですか?... c# は初めてです

4

4 に答える 4

3

test.function1(test.function2)するべきです。

また、必要になります

public delegate void fPointer();

それ以外の

private delegate void fPointer();
于 2012-09-18T11:02:15.623 に答える
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");
        }
    }
于 2012-09-18T11:04:32.467 に答える
1

コードには 2 つの問題があります。

    TestPointer test = new TestPointer();
    test.function1(function2);   

ここではfunction2、スコープ内で呼び出される変数はありません。あなたがしたいことは、次のように呼び出すことです:

    test.function1(test.function2);   

これtest.function2は実際にはメソッド グループであり、この場合はコンパイラによってデリゲートに変換されます。次の問題に進みます。

private delegate void fPointer(); 
public void function1(fPointer ftr)

デリゲートをプライベートとして宣言しました。公開する必要があります。デリゲートは特別な種類の typeですが、それでも型です ( の変数を宣言できます。これは、 への引数を宣言するときに行うこととまったく同じですfunction1)。private として宣言された場合、その型はクラスの外部からは見えTestPointerないため、public メソッドの引数として使用できません。

最後に、実際にはエラーではありませんが、デリゲートを呼び出す方法は単純化できます。

    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");
    }
}
于 2012-09-18T11:16:56.147 に答える
0

作るfunction2 staticか合格する必要がありtext.function2ます。

于 2012-09-18T11:02:49.520 に答える