📜  C#中的局部函数

📅  最后修改于: 2021-05-29 14:05:24             🧑  作者: Mango

C#7.0中引入了局部函数功能。它允许您在已定义方法的主体内部声明一个方法。或者换句话说,我们可以说,本地函数,其范围仅限于其所创建函数的函数的私有函数。局部函数的类型类似于定义它的函数的类型。您只能从其容器成员中调用本地函数。

重要事项:

  • 局部函数在方法,构造函数,属性访问器,事件访问器,匿名方法,lambda表达式,终结器和其他局部函数内部声明。
  • 您不能在表达式主体成员声明局部函数。
  • 局部函数使您的程序更具可读性,还可以避免错误地调用方法,因为您不能直接调用局部函数。
  • 在本地函数,允许您使用异步不安全的修饰符。
  • 局部函数可以访问在容器方法内部定义的局部变量,包括方法参数。
  • 不允许在本地函数定义中使用任何成员访问修饰符,包括private关键字,因为默认情况下它们是私有的,并且不允许将它们公开。
  • 也不允许您将static关键字与local函数一起使用。
  • 也不允许您将属性应用于本地函数,其参数或参数类型。
  • 允许多个本地功能。
  • 本地功能不允许重载。

范例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

本地函数的优点:

  • 您可以创建本地通用函数。

    例子:

    // 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);
        }
    }
    

    输出:

    Value is: 123
    Value is: GeeksforGeeks
    Value is: G
    Value is: 45453.5656
    
  • 您可以在本地函数中传递/引用参数。

    例子:

    // 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);
        }
    }
    

    输出:

    GeeksforGeeks
  • 您可以在局部函数中使用参数。

    例子:

    // 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");
        }
    }
    

    输出:

    Geeks
    gfg
    GeeksforGeeks
    123geeks