0

私は次のものを持っています:

class Program {

    delegate int myDelegate(int x);

    static void Main(string[] args) {

        Program p = new Program();
        Console.WriteLine(p.writeOutput(3, new myDelegate(x => x*x)));

        Console.WriteLine("press [enter] to exit");
        Console.ReadLine();
    }
    private string writeOutput(int x, myDelegate del) {
        return string.Format("{0}^2 = {1}",x, del(x));
    }
}

上記の方法writeOutputは必要ですか?writeoutput上記と同じものを出力するために、以下を なしで書き直すことはできますか?

関数に 3 が入力されるように行Console.WriteLine("x^2 = {0}", new myDelegate(x => x*x));を修正できますか?

class Program {

    delegate int myDelegate(int x);

    static void Main(string[] args) {

        Program p = new Program();

        Console.WriteLine("x^2 = {0}", new myDelegate(x => x*x));

        Console.WriteLine("press [enter] to exit");
        Console.ReadLine();
    }
}
4

3 に答える 3

1

当然、そのように書くことはできません。これについて考えてみてください: xは 2 番目のコードでどのような値を持っているでしょうか? デリゲートのインスタンスを作成しますが、いつ呼び出されますか?

次のコードを使用します。

myDelegate myDelegateInstance = new myDelegate(x => x * x);
Console.WriteLine("x^2 = {0}", myDelegateInstance(3));
于 2013-02-03T13:37:39.397 に答える
1

本当にデリゲートは必要ありません。ただし、機能させるには、次の行を変更する必要があります。

    Console.WriteLine("x^2 = {0}", new myDelegate(x => x*x));

これとともに:

    Console.WriteLine("{0}^2 = {1}", x, x*x);
于 2013-02-03T13:38:47.677 に答える
1

まず、デリゲートは必要ありません。直接乗算するだけです。しかし、最初に、デリゲートの修正。

myDelegate instance = x => x * x;
Console.WriteLine("x^2 = {0}", instance(3));

最初の例と同じように、デリゲートのすべてのインスタンスを関数のように扱う必要があります。はnew myDelegate(/* blah blah */)必要ありません。ラムダを直接使用できます。

次のように書くことができたので、デリゲート/ラムダの使用を練習していると思います。

Console.WriteLine("x^2 = {0}", 3 * 3);
于 2013-02-03T16:24:55.413 に答える