Anuncios
Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre el tipo de variable por valor que sirve de base para todas las demas como es el struct tambien conocido como estructura.

Este tipo de dato es muy popular de C pero en C++ se reemplazo con las clases pero en C# tambien se usa especialmente para definicion de los tipos de datos basicos para las variables de tipo valor, veamos su sintaxis basica:

<modificador> struct nombreStruc
{
   ... instrucciones ...
}

En este caso para definir una nueva estructura usamos la struct seguido del nombre de la misma, luego en el bloque entre llaves asignaremos las instrucciones que tendremos disponibles, se consideran variables, metodos, constructores, etc., este tipo de dato es muy bueno para generar exactamente eso, un nuevo tipo de dato.

Nota: El primer dato es opcional pero si no lo informamos adopta el valor internal.
Anuncios

Para entender mejor este concepto vamos a crear un nuevo archivo llamado fabrica.cs donde le agregaremos el siguiente codigo:

fabrica.cs

using System;

public class Empleado
{
	public struct Persona
	{
		public string nombre;
		public int edad;
		public int salario;
	}
}

public class Program
{
	public static int Main()
	{
		Empleado.Persona p;
		p.nombre = "Martin Miranda";
		p.edad = 33;
		Console.WriteLine(p.nombre + "\t" + p.edad);
		return 0;
	}
}
Anuncios
Nota: Recuerden que una buena practica es definir la clase en otro archivo pero aca lo hacemos por practicidad.
Anuncios

En este codigo tenemos una clase llamada Empleado, el cual posee una struct llamada Persona, el cual tendra tres variables (nombre, edad y salario), despues tenemos el Main donde crearemos un objeto llamado p pero de la struct en la clase, si observan usamos la ruta completa para llamarlo (clase.struct), despues le asignamos el valor a nombre y edad, para luego mostrar estos valores en pantalla, si lo compilamos y probamos veremos la siguiente salida:

C:\Users\tinchicus\Documents\Visual Studio 2019>fabrica.exe
Martin Miranda  33

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

Tambien podriamos haber iniciado a la variable como un objeto por medio de new, veamos el mismo codigo al anterior pero con un inicio de constructor:

	public static int Main()
	{
		Empleado.Persona p = new Empleado.Persona();
		p.nombre = "Martin Miranda";
		p.edad = 33;
		Console.WriteLine(p.nombre + "\t" + p.edad);
		return 0;
	}
Anuncios

Si lo compilan, y lo vuelven a ejecutar veremos que trabaja exactamente de la misma forma, podemos deducir que struct es muy util para trabajar como si fuera un objeto o como si fuera una variable simple, veamos ahora con un nuevo constructor para iniciar nuestros valores directamente:

	public struct Persona
	{
		public string nombre;
		public int edad;
		public int salario;

		public Persona(string n, int e, int s)
		{
			nombre = n;
			edad = e;
			salario = s;
		}
	}
Anuncios

Para esta modificacion agregamos el constructor que recibira tres valores, uno de tipo string y otros dos de tipo int, el primero sera para asignarselo a nombre y los otros a edad y sueldo respectivamente, para nuestro siguiente paso vamos a modificar el codigo de Main en Program.cs de la siguiente manera:

	public static int Main()
	{
		Empleado.Persona p = new Empleado.Persona(
			"Martin Miranda",
			33,
			100000);
		Console.WriteLine(p.nombre + "\t" 
			+ p.edad + "\t"
			+ p.salario);
		return 0;
	}
Anuncios

Como pueden ver implementamos el nuevo constructor y le pasamos los datos directamente (nombre, edad y salario) por ultimo seguimos mostrando los valores enviados, si lo compilamos y probamos obtendremos la siguiente salida:

C:\Users\tinchicus\Documents\Visual Studio 2019>fabrica.exe
Martin Miranda  33      100000

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

No solo mostrara los valores anteriores sino que tambien mostrara el salario del empleado, por ultimo veamos como obtener informacion que no es publica, para ello modifiquemos la estructura de la siguiente manera:

	public struct Persona
	{
		string nombre;
		int edad;
		int salario;

		public Persona(string n, int e, int s)
		{
			nombre = n;
			edad = e;
			salario = s;
		}

		public string getNombre()
		{
			return nombre;
		}

		public int getEdad()
		{
			return edad;
		}

		public int getSalario()
		{
			return salario;
		}
	}
Anuncios

En esta modificacion quitamos el acceso publico de las tres variables, lo cual nos impedira ingresarle informacion directamente, pero aun podemos hacerlo por medio del constructor que creamos, para nuestro siguiente paso tendremos tres metodos:

  • getNombre, sera para obtener el valor de nombre
  • getEdad, este nos devolvera la edad
  • getSalario, este nos devolvera el salario
Anuncios

Con esto explicado podemos pasar a modificar su bloque Main:

	public static int Main()
	{
		Empleado.Persona p = new Empleado.Persona(
			"Martin Miranda",
			33,
			100000);
		Console.WriteLine(p.getNombre() + "\t" 
			+ p.getEdad() + "\t"
			+ p.getSalario());
		return 0;
	}
Anuncios
Anuncios

En este caso creamos al empleado con nuestro constructor y por ultimo lo mostramos por medio de los metodos de la estructura, si lo compilan y prueban volveran a obtener el mismo resultado.

Esta forma de trabajar es una practica recomendada en los lenguajes que permiten restringir el acceso a las variables, funciones, clases, etc, porque mantiene a la informacion de la estructura lejos del codigo del programa y solamente podria ser manipulada por los metodos que nosotros le habilitemos, si observaron bien esta forma de trabajar es muy similar a una clase pero obviamente con algunas practicidades como la no necesidad de aparcar un espacio de memoria, tambien nos da la posibilidad de poder crear nuevos tipos mas practicos, y son completamente complementarios con las clases, veamos como quedo el codigo final de nuestro programa:

fabrica.cs

using System;

public class Empleado
{
	public struct Persona
	{
		string nombre;
		int edad;
		int salario;

		public Persona(string n, int e, int s)
		{
			nombre = n;
			edad = e;
			salario = s;
		}

		public string getNombre()
		{
			return nombre;
		}

		public int getEdad()
		{
			return edad;
		}

		public int getSalario()
		{
			return salario;
		}
	}
}

public class Program
{
	public static int Main()
	{
		Empleado.Persona p = new Empleado.Persona(
			"Martin Miranda",
			33,
			100000);
		Console.WriteLine(p.getNombre() + "\t" 
			+ p.getEdad() + "\t"
			+ p.getSalario());
		return 0;
	}
}
Anuncios

En resumen, hoy hemos visto que son las estructuras, struct, como es su sintaxis, como se pueden aplicar, como se pueden declarar, que ventajas tienen con respecto a las clases, que pueden contener, distintas formas de iniciarlas, y como pueden complementarse con las clases, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

1.00 $