开发者

Can you assign a function to a variable in C#? [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly br开发者_Go百科oad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. Closed 11 years ago.

i saw a function can be define in javascript like

var square = function(number) {return number * number};

and can be called like

square(2);

var factorial = function fac(n) {return n<3 ? n : n*fac(n-1)};
print(factorial(3));

c# code

MyDelegate writeMessage = delegate ()
                              {
                                  Console.WriteLine("I'm called");
                              };

so i need to know that can i define a function in the same way in c#. if yes then just give a small snippet of above like function definition in c# please. thanks.


You can create delegate type declaration:

delegate int del(int number);

and then assign and use it:

   del square = delegate(int x)
    {
        return x * x;
    };

    int result= square (5);

Or as said, you can use a "shortcut" to delegates (it made from delegates) and use:

Func<[inputType], [outputType]> [methodName]= [inputValue]=>[returnValue]

for example:

Func<int, int> square = x=>x*x;
int result=square(5);

You also have two other shortcuts:
Func with no parameter: Func<int> p=()=>8;
Func with two parameters: Func<int,int,int> p=(a,b)=>a+b;


Func<double,double> square = x => x * x;

// for recursion, the variable must be fully
// assigned before it can be used, therefore
// the dummy null assignment is needed:
Func<int,int> factorial = null;
factorial = n => n < 3 ? n : n * factorial(n-1);

Any of the following more verbose forms is possible, too: (I'm using square as an example):

  • Func<double,double> square = x => { return x * x; };
    The expression is expanded to a statement block.

  • Func<double,double> square = (double x) => { return x * x; };
    Explicit parameter list instead of just one parameter with inferred type.

  • Func<double,double> square = delegate(double x) { return x * x; };
    This one uses the older "anonymous delegate" syntax instead of so-called "lambda expressions" (=>).

P.S.: int might not be an appropriate return type for a method such as factorial. The above examples are only supposed to demonstrate syntax, so modify them as necessary.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜