69 - Métodos estáticos


En C# podemos definir métodos que se crean independientemente a la definición de objetos. Un método estático puede llamarse sin tener que crear un objeto de dicha clase. Un método estático tiene ciertas restricciones:

  • No puede acceder a los atributos de la clase (salvo que sean estáticos)
  • No puede utilizar el operador this, ya que este método se puede llamar sin tener que crear un objeto de la clase.
  • Puede llamar a otro método siempre y cuando sea estático.
  • Un método estático es lo más parecido a lo que son las funciones en los lenguajes estructurados (con la diferencia que se encuentra encapsulado en una clase)

Si recordamos cada vez que creamos un programa en C# debemos especificar el método Main:

   static void Main(string[] args)

El método Main es estático para que el sistema operativo pueda llamarlo directamente sin tener que crear un objeto de la clase que lo contiene.

Problema 1:

Implementar una clase llamada Operacion. Definir dos métodos estáticos que permitan sumar y restar dos valores enteros.

Programa:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MetodosEstaticos1
{
    class Operacion
    {
        public static int Sumar(int x1, int x2)
        {
            int s = x1+x2;
            return s;
        }

        public static int Restar(int x1,int x2)
        {
            int r = x1 - x2;
            return r;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("La suma de 2+4 es ");
            Console.WriteLine(Operacion.Sumar(2, 4));
            Console.Write("La resta de 6-2 es ");
            Console.WriteLine(Operacion.Restar(6, 2));
            Console.ReadKey();
        }
    }
}

Agregamos la palabra clave static antes de indicar el valor que retorna el método:

        public static int Sumar(int x1, int x2)
        {
            int s = x1+x2;
            return s;
        }

Luego cuando llamamos al método estático lo hacemos antecediendo el nombre de la clase:

            Console.Write("La suma de 2+4 es ");
            Console.WriteLine(Operacion.Sumar(2, 4));
            Console.Write("La resta de 6-2 es ");
            Console.WriteLine(Operacion.Restar(6, 2));

Es importante notar que no se crean objetos de la clase Operacion para poder llamar a los métodos Sumar y Restar.

Problema propuesto

  1. Plantear una clase llamada VectorEnteros que defina tres métodos estáticos. El primero retorna el mayor elemento del vector, el segundo el menor elemento y el tercero la suma de sus componentes.
Solución
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MetodosEstaticos2
{
    class VectorEnteros
    {
        public static int Mayor(int[] vec)
        {
            int may = vec[0];
            for (int x = 0; x < vec.Length; x++)
            {
                if (vec[x] > may)
                {
                    may = vec[x];
                }
            }
            return may;
        }

        public static int Menor(int[] vec)
        {
            int men = vec[0];
            for (int x = 0; x < vec.Length; x++)
            {
                if (vec[x] < men)
                {
                    men = vec[x];
                }
            }
            return men;
        }

        public static int SumaElementos(int[] vec)
        {
            int suma = 0;
            for (int x = 0; x < vec.Length; x++)
            {
                suma = suma + vec[x];
            }
            return suma;
        }

        public static void Imprimir(int[] vec)
        {
            Console.Write("Impresión del vector:");
            for (int x = 0; x < vec.Length; x++)
            {
                Console.Write(vec[x] + " "); ;
            }
            Console.WriteLine();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int[] v = { 5, 6, 20 };
            VectorEnteros.Imprimir(v);
            Console.WriteLine("El mayor elemento del vector es :" + VectorEnteros.Mayor(v));
            Console.WriteLine("El menor elemento del vector es :" + VectorEnteros.Menor(v));
            Console.Write("La suma de los elementos del vector es :" + VectorEnteros.SumaElementos(v));
            Console.ReadKey();
        }
    }
}

Retornar