美文网首页
江南小碧的C#教程:5、函数/递归/委托/匿名函数(Lambda

江南小碧的C#教程:5、函数/递归/委托/匿名函数(Lambda

作者: c02d1b205155 | 来源:发表于2017-05-19 12:30 被阅读142次

函数

我们以自定义一个求绝对值的abs函数为例:

using static System.Console;

class TestAbs {
    static int abs(int x) {
        if (x >= 0) {
            return x;
        } else {
            return -x;
        }
    }

    static void Main() {
        var a = -100;
        WriteLine(abs(a));
    }
}

输出100。

递归

再来个经典的递归求斐波那契的函数:

using static System.Console;

class TestFib {
    static int Fib(int x) {
        if (x == 1) {
            return 0;
        } else if (x == 2) {
            return 1;
        } else {
            return Fib(x-1) + Fib(x-2);
        }
    }

    static void Main() {
        WriteLine(Fib(10));
    }
}

委托

委托类似于C++的函数指针,通过它可以方便地把一个方法塞到另一个方法的参数中。
参见[C#] 委托与事件(1)
另附一个Python的map函数的C#类似实现:

using static System.Console;

class Test {
    delegate void del(int i);

    static void map(del func, int[] i) {
        foreach (int j in i) {
            func(j);
        }
    }

    static void Main() {
        // del myDelegate = x => x * x;
        // WriteLine(myDelegate(5));
        int[] i = {1,2,3};
        map(WriteLine, i);
    }
}

输出

1
2
3

匿名函数

Lambda简单用法参见微软官方教程Lambda 表达式(C# 编程指南)

在上面代码的基础上,通过匿名函数快速对数组中的数进行平方:

using static System.Console;

class Test {
    delegate int del(int i);

    static void map(del func, int[] i) {
        foreach (int j in i) {
            WriteLine(func(j));
        }
    }

    static void Main() {
        del myDelegate = x => x * x;
        int[] i = {1,2,3};
        map(myDelegate, i);
    }
}

相关文章

网友评论

      本文标题:江南小碧的C#教程:5、函数/递归/委托/匿名函数(Lambda

      本文链接:https://www.haomeiwen.com/subject/phcyxxtx.html