From b1d4959956c85ec01ca72c8b814867039aa96b16 Mon Sep 17 00:00:00 2001 From: Kister Hakusan <2753888203@qq.com> Date: Mon, 20 Oct 2025 11:12:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Lesson15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- C#进阶/C#进阶.sln | 12 +++ .../Lesson15_lambda表达式.csproj | 10 ++ C#进阶/Lesson15_lambad表达式/Program.cs | 97 +++++++++++++++++++ .../Lesson15_lambda表达式练习.csproj | 10 ++ C#进阶/Lesson15_lambad表达式练习/Program.cs | 50 ++++++++++ 5 files changed, 179 insertions(+) create mode 100644 C#进阶/Lesson15_lambad表达式/Lesson15_lambda表达式.csproj create mode 100644 C#进阶/Lesson15_lambad表达式/Program.cs create mode 100644 C#进阶/Lesson15_lambad表达式练习/Lesson15_lambda表达式练习.csproj create mode 100644 C#进阶/Lesson15_lambad表达式练习/Program.cs diff --git a/C#进阶/C#进阶.sln b/C#进阶/C#进阶.sln index 0d5c747..a51d5e9 100644 --- a/C#进阶/C#进阶.sln +++ b/C#进阶/C#进阶.sln @@ -61,6 +61,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson14_匿名函数", "Le EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson14_匿名函数练习", "Lesson14_匿名函数练习\Lesson14_匿名函数练习.csproj", "{9030BA7A-FDFA-4F88-869E-918589104831}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson15_lambda表达式", "Lesson15_lambad表达式\Lesson15_lambda表达式.csproj", "{50810F24-0145-43C6-AE3E-1D99D0583AB8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lesson15_lambda表达式练习", "Lesson15_lambad表达式练习\Lesson15_lambda表达式练习.csproj", "{E0931580-D76C-4434-B059-149AEED828ED}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -183,6 +187,14 @@ Global {9030BA7A-FDFA-4F88-869E-918589104831}.Debug|Any CPU.Build.0 = Debug|Any CPU {9030BA7A-FDFA-4F88-869E-918589104831}.Release|Any CPU.ActiveCfg = Release|Any CPU {9030BA7A-FDFA-4F88-869E-918589104831}.Release|Any CPU.Build.0 = Release|Any CPU + {50810F24-0145-43C6-AE3E-1D99D0583AB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50810F24-0145-43C6-AE3E-1D99D0583AB8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50810F24-0145-43C6-AE3E-1D99D0583AB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50810F24-0145-43C6-AE3E-1D99D0583AB8}.Release|Any CPU.Build.0 = Release|Any CPU + {E0931580-D76C-4434-B059-149AEED828ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E0931580-D76C-4434-B059-149AEED828ED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0931580-D76C-4434-B059-149AEED828ED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E0931580-D76C-4434-B059-149AEED828ED}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/C#进阶/Lesson15_lambad表达式/Lesson15_lambda表达式.csproj b/C#进阶/Lesson15_lambad表达式/Lesson15_lambda表达式.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/C#进阶/Lesson15_lambad表达式/Lesson15_lambda表达式.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/C#进阶/Lesson15_lambad表达式/Program.cs b/C#进阶/Lesson15_lambad表达式/Program.cs new file mode 100644 index 0000000..0cc35a6 --- /dev/null +++ b/C#进阶/Lesson15_lambad表达式/Program.cs @@ -0,0 +1,97 @@ +namespace Lesson15_lambda表达式 +{ + class Program + { + static void Main(string[] args) + { + #region 知识点一 什么时lambda表达式 + //可以将lambda表达式理解为 匿名函数的简写 + //它除了写法不同外 + //使用上和匿名函数是一样的 + //都是配合委托类型使用的 + #endregion + + #region 知识点二 lambda表达式的语法 + //匿名函数 + //delegate(参数列表){函数体}; + + //lambda表达式 + //(参数列表)=>{函数体}; + #endregion + + #region 知识点三 使用 + //1.无参无返回值的lambda表达式 + Action a = () => + { + Console.WriteLine("无参无返回的lambda表达式函数"); + }; + a(); + + //2.有参无返回值的lambda表达式 + Action a2 = (int i1) => + { + Console.WriteLine($"有参无返回的lambda表达式 参数i1:{i1}"); + }; + a2(100); + + //3.有参的lambda表达式,甚至参数类型都可以省略 参数类型和委托或事件容器一致 + Action a3 = (i1) => + { + Console.WriteLine($"有参无返回的lambda表达式 参数i1:{i1}"); + }; + a3(200); + + //4.有返回值的lambda表达式 + Func f = (i1, i2) => + { + Console.WriteLine($"有返回的lambda,将返回{i1}与{i2}相加"); + return i1 + i2; + }; + Console.WriteLine(f(10, 20)); + #endregion + + Test t = new Test(); + t.Dosomething(); + } + } + #region 知识点四 闭包 + //内层的函数可以引用包含在它外层的变量 + //即使外层函数已经执行完毕 + //注意: + //该变量提供的值并不是变量创建时的值,而是在父函数范围内最后一次被修改的值 + #endregion + + class Test + { + public event Action action; + public Test() + { + int value = 10; + //这里就是一个闭包的例子 + //因为 当构造函数执行完毕后 value变量的生命周期应该结束了 + //但是由于action引用了value变量 + //所以value变量的生命周期被延长了 + action = () => + { + Console.WriteLine($"闭包value的值为:{value}"); + }; + for (int i = 0; i < 10; i++) + { + int index = i;//解决闭包问题的常用方法 + //每次都是新创建的index变量,所以可以保存当时的值 + //但是i是在循环里的,所以每次循环都是同一个i变量,所以最终闭包引用的i变量的值就是循环结束时的值10 + action += () => + { + Console.WriteLine($"闭包循环i的值为:{i}"); + Console.WriteLine($"闭包循环index的值为:{index}"); + }; + + } + } + + public void Dosomething() + { + action(); + } + } +} diff --git a/C#进阶/Lesson15_lambad表达式练习/Lesson15_lambda表达式练习.csproj b/C#进阶/Lesson15_lambad表达式练习/Lesson15_lambda表达式练习.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/C#进阶/Lesson15_lambad表达式练习/Lesson15_lambda表达式练习.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/C#进阶/Lesson15_lambad表达式练习/Program.cs b/C#进阶/Lesson15_lambad表达式练习/Program.cs new file mode 100644 index 0000000..fbcdfa7 --- /dev/null +++ b/C#进阶/Lesson15_lambad表达式练习/Program.cs @@ -0,0 +1,50 @@ +namespace Lesson15_lambda表达式练习 +{ + class Program + { + static void Main(string[] args) + { + a1()(); + a2()(); + } + + public static Action a1() + { + Action action = null; + for (int i = 1; i <= 10; i++) + { + int index = i; + action += delegate() + { + Console.WriteLine(index); + }; + } + return action; + } + public static Action a2() + { + Action action = null; + for (int i = 1; i <= 10; i++) + { + int index = i; + action += () => Show(index); + } + return action; + } + public static Action a3() + { + Action action = null; + for (int i = 1; i <= 10; i++) + { + int index = i; + action += () => Show(index); + } + return action; + } + static void Show(int x) + { + Console.WriteLine(x); + } + } + +}