Función local estática en C# 8.0

En C# 7.0, se introducen funciones locales. La función local le permite declarar un método dentro del cuerpo de un método ya definido. O en otras palabras, podemos decir que una función local es una función privada de una función cuyo alcance se limita a esa función en la que se crea. El tipo de función local es similar al tipo de función en el que se define. Solo puede llamar a la función local desde sus miembros contenedores. 

Ejemplo:

C#

// Simple C# program to
// illustrate local function
using System;
 
class Program {
 
    // Main method
    public static void Main()
    {
        // Here SubValue is the local
        // function of the main function
        void SubValue(int a, int b)
        {
            Console.WriteLine("Value of a is: " + a);
            Console.WriteLine("Value of b is: " + b);
            Console.WriteLine("final result: {0}", a - b);
            Console.WriteLine();
        }
 
        // Calling Local function
        SubValue(30, 10);
        SubValue(80, 60);
    }
}

Producción:

Value of a is: 30
Value of b is: 10
final result: 20

Value of a is: 80
Value of b is: 60
final result: 20

Pero en C# 7.0 no puede usar modificadores estáticos con función local o, en otras palabras, no puede crear una función local estática. Esta función se agrega en C# 8.0. En C# 8.0, puede usar un modificador estático con la función local. Esto asegura que la función local estática no haga referencia a ninguna variable del ámbito envolvente o circundante. Si la función local estática intenta acceder a la variable desde el ámbito adjunto, el compilador arrojará un error. Discutamos este concepto con la ayuda de los ejemplos dados:

Ejemplo 1: 

C#

// Simple C# program to illustrate
// the static local function
using System;
 
class Program {
 
    // Main method
    public static void Main()
    {
        // Here AreaofCircle is the local
        // function of the main function
        void AreaofCircle(double a)
        {
            double ar;
            Console.WriteLine("Radius of the circle: " + a);
 
            ar = 3.14 * a * a;
 
            Console.WriteLine("Area of circle: " + ar);
 
            // Calling static local function
            circumference(a);
 
            // Circumference is the Static local function
            static void circumference(double radii)
            {
                double cr;
                cr = 2 * 3.14 * radii;
                Console.WriteLine("Circumference of the circle is: " + cr);
            }
        }
 
        // Calling function
        AreaofCircle(30);
    }
}

Producción:

Radius of the circle: 30
Area of circle: 2826
Circumference of the circle is: 188.4

Ejemplo 2: 

C#

// Simple C# program to illustrate
// the static local function
using System;
 
class Program {
 
    // Main method
    public static void Main()
    {
        // Here AreaofCircle is the local
        // the function of the main function
        void AreaofCircle(double a)
        {
            double ar;
            Console.WriteLine("Radius of the circle: " + a);
 
            ar = 3.14 * a * a;
 
            Console.WriteLine("Area of circle: " + ar);
 
            // Circumference is the Static local function
            // If circumference() try to access the enclosing
            // scope variable, then the compile will give error
            static void circumference()
            {
                double cr;
                cr = 2 * 3.14 * a;
                Console.WriteLine("Circumference of the circle is: " + cr);
            }
        }
 
        // Calling function
        AreaofCircle(30);
    }
}

Producción:

Error CS8421: A static local function cannot contain a reference to 'a'. (CS8421) (f)

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *