c# 中的局部函数
在 C# 7.0 中引入了本地功能特性。它允许您在已经定义的方法体内声明一个方法。或者换句话说,我们可以说局部函数是一个函数的私有函数,它的作用域仅限于创建它的那个函数。局部函数的类型与定义它的函数的类型相似。您只能从它们的容器成员中调用本地函数。
要点:
- 局部函数在方法、构造函数、属性访问器、事件访问器、匿名方法、lambda 表达式、终结器和其他局部函数中声明。
- 不能在表达式主体成员中声明局部函数。
- 局部函数使您的程序更可读,也使您免于错误地调用方法,因为您不能直接调用局部函数。
- 在本地功能中,您可以使用异步和不安全修改器。
- 局部函数可以访问容器方法内部定义的局部变量,包括方法参数。
- 不允许在本地函数定义中使用任何成员访问修饰符,包括 private 关键字,因为默认情况下它们是私有的,并且不允许将其公开。
- 也不允许在局部函数中使用 static 关键字。
- 也不允许将属性应用于局部函数、其参数或其参数类型。
- 允许多个本地功能。
- 局部函数不允许重载。
例 1:
// C# program to illustrate local function
using System;
public class Program {
// Main method
public static void Main()
{
// Local Function
void AddValue(int a, int b)
{
Console.WriteLine("Value of a is: " + a);
Console.WriteLine("Value of b is: " + b);
Console.WriteLine("Sum of a and b is: {0}", a + b);
Console.WriteLine();
}
// Calling Local function
AddValue(20, 40);
AddValue(40, 60);
}
}
输出:
Value of a is: 20
Value of b is: 40
Sum of a and b is: 60
Value of a is: 40
Value of b is: 60
Sum of a and b is: 100
例 2:
// C# program to illustrate local function
// accessing the variable of the function
// in which they present
using System;
public class Program {
// Main method
public static void Main()
{
// Variables of main method
int x = 40;
int y = 60;
// Local Function
void AddValue(int a, int b)
{
Console.WriteLine("Value of a is: " + a);
Console.WriteLine("Value of b is: " + b);
Console.WriteLine("Value of x is: " + x);
Console.WriteLine("Value of y is: " + y);
Console.WriteLine("Sum: {0}", a + b + x + y);
Console.WriteLine();
}
// Calling Local function
AddValue(50, 80);
AddValue(79, 70);
}
}
输出:
Value of a is: 50
Value of b is: 80
Value of x is: 40
Value of y is: 60
Sum: 230
Value of a is: 79
Value of b is: 70
Value of x is: 40
Value of y is: 60
Sum: 249
局部功能优势:
-
You are allowed to create local generic functions.
示例:
```cs // C# program to illustrate how to // create local generic function using System;
public class Program {
// Main method public static void Main() {
// Local Generic Function void MyMethod(MyValue value) { Console.WriteLine("Value is: " + value); }
// Calling local generic function MyMethod(123); MyMethod("GeeksforGeeks"); MyMethod('G'); MyMethod(45453.5656); } } ```
输出:
```cs Value is: 123 Value is: GeeksforGeeks Value is: G Value is: 45453.5656
```
-
You are allowed to pass out/ref parameters in local functions.
示例:
```cs // C# program to illustrate how can we // out prarameter in local function using System;
public class Program {
// Main method public static void Main() {
// Local Function with out parameter void MyMethod(string str, out string s) { s = str + "for" + "Geeks"; } string a = null;
// Calling Local function MyMethod("Geeks", out a); Console.WriteLine(a); } } ```
输出:
cs GeeksforGeeks
-
You are allowed to use params in local functions.
示例:
```cs // C# program to illustrate how can we // pass params in local function using System;
public class Program {
// Main method public static void Main() {
// Local Function // Using params void MyMethod(params string[] data) { for (int x = 0; x < data.Length; x++) { Console.WriteLine(data[x]); } } // Calling Local function MyMethod("Geeks", "gfg", "GeeksforGeeks", "123geeks"); } } ```
输出:
cs Geeks gfg GeeksforGeeks 123geeks
版权属于:月萌API www.moonapi.com,转载请注明出处