Local Function in C#

The local function feature is introduced in C# 7.0. It allows you to declare a method inside the body of an already defined method. Or in other words, we can say that a local function is a private function of a function whose scope is limited to that function in which it is created. The type of local function is similar to the type of function in which it is defined. You can only call the local function from their container members.

Important Points:

  • Local functions are declared inside methods, constructors, property accessors, event accessors, anonymous methods, lambda expressions, finalizers, and other local functions.
  • You cannot declare a local function in the expression-bodied member.
  • Local function makes your program more readable and also save you from mistakenly call method because you cannot call a local function directly.
  • In local function, you are allowed to use async and unsafe modifiers.
  • Local function can access the local variables that are defined inside the container method including method parameters.
  • You are not allowed to use any member access modifiers in the local function definition, including private keyword because they are by default private and you are not allowed to make them public.
  • You are also not allowed to use static keyword with local function.
  • You are also not allowed to apply attributes to the local function, or to its parameters, or to its parameter type.
  • Multiple local functions are allowed.

Example 1:



filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

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

Example 2:

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

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

Advantages of local function:

  • You are allowed to create local generic functions.

    Example:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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>(MyValue value)
            {
                Console.WriteLine("Value is: " + value);
            }
      
            // Calling local generic function
            MyMethod<int>(123);
            MyMethod<string>("GeeksforGeeks");
            MyMethod<char>('G');
            MyMethod<double>(45453.5656);
        }
    }

    chevron_right

    
    

    Output:

    Value is: 123
    Value is: GeeksforGeeks
    Value is: G
    Value is: 45453.5656
    
  • You are allowed to pass out/ref parameters in local functions.

    Example:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

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

    chevron_right

    
    

    Output:

    GeeksforGeeks
  • You are allowed to use params in local functions.

    Example:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

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

    chevron_right

    
    

    Output:

    Geeks
    gfg
    GeeksforGeeks
    123geeks


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.