Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delegate: Method name expected error

Tags:

c#

delegates

I'm trying to get the following simple Delegate example working. According to a book I've taken it from it should be ok, but I get a Method name expected error.

namespace TestConsoleApp
{
    class Program
    {
        private delegate string D();

        static void Main(string[] args)
        {
            int x = 1;

            D code = new D(x.ToString());

        }
    }
}

Any help?

like image 825
pistacchio Avatar asked Feb 22 '10 08:02

pistacchio


3 Answers

Remove the ():

D code = new D(x.ToString);

You want to specify the method, not execute it.

like image 177
Hans Kesting Avatar answered Oct 03 '22 05:10

Hans Kesting


I think you mean:

D code = new D(x.ToString);

Note the lack of brackets. With the brackets on, it was a method invocation - i.e. you were trying to execute x.ToString() in that line of code. Without the brackets, it's a method group - an expression which tells the compiler to look at the available methods with that name (in that context), precisely for the purpose of creating delegates.

Which book are you using? If it really has the brackets in the examples it shows, you may want to email the author (or at least check the book's errata page). If it's C# in Depth, I'll go and cry in a corner...

like image 35
Jon Skeet Avatar answered Oct 03 '22 05:10

Jon Skeet


You need to feed a method into the delegate constructor.

x.ToString()

is not a method, but a string. Use

D code = new D(x.ToString); 
like image 3
Jens Avatar answered Oct 03 '22 05:10

Jens