Category Archives: Tipos

We Love C# – Tipo Struct

Overview

Conheça agora os tipos Struct do C#. Vamos lá:

Declare tipos contendo vários valores, identificados por um nome. Semelhante à struct do C!

A missão é conhecer o Struct do C#, abordando as suas responsabilidades, características, aplicabilidade, pontos positivos e negativos, ou seja, o foco aqui será apenas em conceitos essenciais sobre esse recurso. Abordarei também algumas implementações básicas apenas para contextualizar melhor o entendimento.

A Definição

Um STRUCT em C# é uma simples composição de tipos de dados composta de elementos de outros tipos. Ele nos permite declarar tipos que contem diversos valores identificados pelo nome. Ou seja, eles são um conjunto de diversos tipos de dados que podem ter tamanhos diferentes agrupados sob uma declaração única.

Técnicamente falando, um tipo struct é um tipo de valor que pode conter construtores, const, campos, métodos, propriedades, indexadores, operadores e mesmo outro tipos de estruturas.

Eles são tipos abstratos de dados bem semelhantes a classes. A diferença mais sensível entre classses e structs reside no fato de que struct não é alocada na memória heap, e os seus valores são diretamente contidos na estrutura; o que equivale a dizer que structs são tipos valor e não referência.

A declaração

A declaração de struct simples:

Atributo struct IdentificadorDoTipo

Veja outra declaração:

[modificador de acesso] struct <nome da estrutura> : [interface]
{
	//membros da estrutura
}

Note na sintaxe da declaração da struct, semelhantemente a uma classe, structs podem implementar interfaces. De forma similar a uma classe, uma struct pode possuir construtores, porém não possui destrutores e os construtores devem ser customizados. A tentativa de declarar o construtor default gera um erro de compilação.

Para criar uma variável de um tipo struct:

<tipo struct> identificador = new <tipostruct> 
  [parâmetros do construtor]

Declarado a struct, os valores default dos seus atributos são configurados e copiados diretamente na struct. Ao contrário das classes, que armazenam referências para áreas da memória, a struct contém os seus valores.

Os exemplos

Ok! Chega de teoria! Vamos praticar:

public struct Point
{
    public int x, y;
    
    public Point(int pl, int p2)
    {
          x = pl;
          y = p2;
    }
}

Aqui outra definição de struct:

public struct Clientes
{
	string nome;
	string email;
}

Aqui eu declaro uma struct public, por isso, pode ser colocado em qualquer lugar do arquivo, exceto dentro de funções ou rotinas. Caso a struct seja private podemos colocar o código dentro de uma classe ou módulo.

Pronto! Feito isto é só usar a nossa struct!

Clientes cliente;
cliente.nome = "Aldo";
cliente.email = "Aldo@hm.com";

Aqui estou criando um objeto do tipo Clientes em qualquer lugar do código e atribuo informações.

Note que estou criando uma instância da struct sem usar o operador new, mas também é possível usar este operador:

Clientes cliente = new Clientes();
cliente.nome = "Aldo";

Agora veja a declaração desta outra estrutura:

struct Circulo
{
	private int x, y;
	private float diametro;
	
	public Circulo(int a, int b, float Diametro)
	{
		x = a;
		y = b;

		diametro = Diametro;
	}
}
class CsharpApp
{
	static void Main( )
	{
		Circulo oCirc = new Circulo(0,1, 10);
		Console.ReadLine( );
	}
}

Aqui temos um struct simples, que define 3 variáveis e um construtor.

Fixação

Veja mais um exemplo básico de struct:

public struct Point
{
	public int x, y;

	public Point(int x, int y)
	{
		this.x = x;
		this.y = y;
	}
}
class MainClass
{
	public static void Main()
	{
		Point myPoint;

		myPoint.x = 10;
		myPoint.y = 20;
		
		Console.WriteLine("My Point:");
		Console.WriteLine("x = {0}, y = {1}", myPoint.x, myPoint.y);
		Console.ReadLine();
	}
}

Declaro um objeto. Inicializo suas propriedades. Mostro os resultados.

A saída será x=10 e y=20.

Observações

Veja alguns pontos importantes:

Ok! Sobre os TIPOS STRUCTS C# é tudo o que eu tenho a dizer.