• Home

    Escolha seu Plano

    Carreiras Alura

    Evolua com profundidade técnica, direção clara e aplicação prática.

    Jornadas guiadas do básico ao avançado com checkpoints práticos, desenhadas para quem busca profundidade e protagonismo técnico.

    Iniciante

    Comece do zero com uma trilha clara e progressiva.

    Fundamentos práticos para dar os primeiros passos com segurança e construir uma base sólida.

    Intermediário

    Continue sua evolução com cursos que conectam fundamentos, ferramentas e prática profissional. Ganhe autonomia, e avance para projetos mais completos.

    Avançado

    Aprofunde temas técnicos e estratégicos para enfrentar desafios mais complexos. Explore boas práticas, arquitetura, performance com visão profissional.

    Cursos

    Ver mais cursos de Back-end
    • Pensamento computacional: fundamentos da computação e lógica de programação
    • Lógica de programação: mergulhe em programação com JavaScript
    • DDD: fundamentos do design orientado a domínio
    • ASP.NET: autenticação e autorização em APIs e aplicações web
    • Microsserviços: migração de monólitos e modularização

    Cursos

    Ver mais cursos de Dados
    • Python para Dados: primeiros passos
    • Excel: domine o editor de planilhas
    • Engenharia de Dados: Orquestração de Pipelines com Apache Airflow
    • Power BI Desktop: construindo meu primeiro dashboard
    • Governança e Arquitetura de Dados

    Cursos

    Ver mais cursos de Inteligência Artificial
    • IA: Explorando o Potencial da Inteligência Artificial Generativa
    • Engenharia de Prompt: Criando Prompts Eficazes para IA Generativa
    • Claude para Análise de Dados: prompts, integrações e automações
    • Agno: criando agentes e sistemas multiagente
    • Engenharia de software na era da IA: segurança de aplicações com agentes, MCPs e código gerado por IA

    Cursos

    Ver mais cursos de Front-end
    • HTML e CSS: ambiente, estrutura e estilo
    • React: realizando testes avançados com Jest e Testing Library
    • React: integrando TypeScript em projetos
    • JavaScript: aprendendo a programar
    • React: aplicando arquiteturas de Micro frontends

    Cursos

    Ver mais cursos de DevOps
    • Sistema Operacional Linux: fundamentos e administração prática
    • Containers e Docker: empacotamento, isolamento e gestão
    • Redes: dos conceitos iniciais à criação de uma intranet
    • Linux: gerenciando diretórios, arquivos, permissões e processos
    • Cibersegurança: Fundamentos e práticas integradas

    Cursos

    Ver mais cursos de UX & Design
    • UX Research: mapeando a experiência da pessoa usuária
    • UX/UI Design: Entregando produtos digitais com IA
    • UI Design: Prototipação e animações interativas
    • Figma: Conhecendo o programa
    • Product Design: métricas e ciclo de vida do produto

    Cursos

    Ver mais cursos de Gestão & Negócios
    • Canva: Criação de landing pages e e-mail marketing
    • Agilidade: como ela pode ajudar a criar um time de alta performance
    • Google Analytics 4: Extrair insights e configurar eventos
    • Management 3.0: gerencie o ambiente, não as pessoas
    • Automação de processos com n8n: Inteligência de dados para Marketing

    Cursos

    Ver mais cursos de Mobile
    • React Native: Estilização e Layouts com Flexbox e StyleSheet
    • Flutter: Graphql e suporte offline
    • Android com Gemini: Trabalhando com textos e imagens na IA
    • Dart: trabalhando com orientação a objetos
    • React Native: Dominando Listas com FlatList e ScrollView

    Carreiras

    Ver mais carreiras
    • Especialista em IA
    • Engenharia de IA
    • Ai native software engineering
    • Arquitetura de Soluções com IA
    • AI Product Design
    • Engenharia de Machine Learning
    • Desenvolvimento Front-End React
    • Engenharia de Dados
    • Cloud Security
    • Social Media Marketing
    • Engenharia de Agentes de IA

    Cursos

    • Engenharia de Prompt: Prompts Eficazes para IA Generativa
    • Claude Code: Criando sua Primeira Aplicação
    • Python: Crie sua Primeira Aplicação
    • Git e GitHub: Compartilhando e Colaborando
    • N8N: Fluxos de Trabalho Avançados

    Cursos

    • Copilot Studio: Solução Multiagentes
    • Padrões de API HTTP e Modelagem de APIs
    • Python para Análise de Dados com SQL
    • Docker: Criando e Gerenciando Containers
    • Design com IA: Otimizando o Processo Criativo

    Cursos

    • Model Context Protocol (MCP)
    • Spec-Driven Development: Dev Assistido por Agentes
    • Arquitetura de Sistemas Distribuídos com Java
    • Governança de Modelos e Reprodutibilidade
    • Pentest: Vulnerabilidades em Aplicações Web

    Escolha seu Plano

    Skills & Go

    O Skills & Go é para Tech Leads, Product Managers, estrategistas e early adopters que transformam ideias em soluções de alto impacto. Em cursos ao vivo e 100% online, você domina a nova era da IA em tempo real.

    Aulas ao vivo

    Saiba mais
    • Agentic Engineering: orquestre múltiplos agentes com confiabilidade
    • Building AI Products: transforme ideias em produtos reais com IA
    • AI Data Strategy: transforme dados em decisões estratégicas com IA

    Escolha seu Plano

    Eventos Alura

    Nossos eventos são pensados para quem quer estar à frente das mudanças em tecnologia, IA e inovação. Em experiências presenciais, você acompanha tendências e se conecta com especialistas que estão moldando o futuro.

    Próximos eventos

    • Imersão Engenharia de Software: Dev na Era da IA
    • IA Conference
    • Alura Signals
  • Talent Lab
  • IA

    Escolha seu Plano

    Conteúdos gratuitos

    Explore conteúdos gratuitos para aprender tecnologia no seu ritmo. Encontre artigos com conteúdos técnicos para aprender na prática, notícias para acompanhar as principais tendências do mercado e o Alura Labs, com análises e reflexões de especialistas sobre tecnologia, IA e carreira.

    Conteúdos gratuitos

    • Artigos
    • Notícias
    • Alura Labs
  • Para Empresas
Ver planos
Links principais
  • Planos e Promoções
  • Links complementares do menu mobile
  • Talent lab
  • Inteligência Artificial
  • Pós Graduações
  • Para Empresas
  • Sobre a Alura
  • Grupo Alun
  • Entrar
    • Home
    • Carreiras
    • Skills & Go
    • Talent Lab
    • Inteligência Artificial
    • Pós Graduações
    • Artigos
    • Sobre a Alura
    • Grupo Alun
    LoginContato
    • LinkedIn
    • Instagram
    • YouTube
    1. Página inicial
    2. Back-end
    3. C#: entendendo classes e structs

    C#: entendendo classes e structs

    8 min8 minutos de leitura

    8 min8 minutos de leitura

    Publicado: 21/06/2022

    Última atualização: 20/03/2026

    1. O que são classes?
    2. Mas, afinal, o que são Structs?
    3. Usar classes ou struct?
    4. Conclusão

    Quando estamos nos aprofundando no aprendizado de alguma linguagem de programação, por vezes nos deparamos com algumas características bem singulares, específicas de uma determinada linguagem e a outras que são comuns a várias, como, por exemplo, os tipos de estrutura de dados disponíveis.

    Em linguagens orientadas a objetos a estrutura mais utilizada sem sombra de dúvidas são as classes.

    Mas será que sempre a melhor estrutura a ser criada será uma classe? Qual o custo computacional na utilização de uma classe em comparação a um tipo de valor?

    No C#, como na linguagem C, existe um tipo de estrutura, que inclusive é muito utilizada pelo próprio framework .NET, mas que não possui todo o “glamour” das classes. Estamos falando das structs, que podem ser de grande ajuda para criarmos códigos para trabalhar pequenos conjuntos de dados.

    Mas como criamos uma estrutura? Em quais situações devo utilizar? E, a clássica pergunta: usar classes ou structs? No texto a seguir, responderemos a alguns destes questionamentos.

    O que são classes?

    As diversas literaturas técnicas disponíveis definem a classe como sendo um molde para a criação de objetos. Uma definição bem interessante é a do Everton Araújo, autor do livro Orientação a Objetos em C#, da Casa do Código.

    Para Araújo, uma classe "é um conjunto ou um conjunto de objetos que compartilham de propriedades e métodos em comum."

    Mas este conceito de classes e objetos nos leva ao paradigma de programação da orientação a objetos, que é um estilo de pensar e programar um software levando em consideração aspectos da nossa realidade, como, por exemplo, um carro, uma pessoa ou mesmo conceitos mais abstratos como uma conta bancária.

    Então, com base nessas definições imagine que você está lendo um determinado livro, para ser mais exato o livro do Everton Araújo. Esse livro é um objeto, correto? Quantas páginas este livro tem? Todo livro possui algumas características como título, editora, autor, número de páginas, entre outras.

    Podemos ir além e expandir essas características a outros objetos que se classificam como livros, certo? Se sim, podemos criar uma classe que irá conter tais características. No C# podemos definir uma classe como mostrada a seguir:

    public class Livro
        {
            public string Titulo { get; set; }
            public string Autor { get; set; }
            public int NumeroPaginas { get; set; }
            public bool PossuiISBN { get; set; }
            public string ISBN { get; set; }
            public DateTime AnoPublicacao { get; set; }
             public string DadosLivro()
            {
                return 
    quot;Título: {this.Titulo}"+
                       
    quot;Autor: {this.Autor}";
            }
        }
    

    Para fazer uso de objetos de uma determinada classe, precisamos criar objetos desta classe. Estas estruturas irão receber os valores de propriedades para representar um “objeto” que existe no mundo real. Um exemplo em código:

    Livro livro = new Livro()
    {
        Titulo = "Orientação a Objetos em C#",
        Autor = "Everton Araújo",
        NumeroPaginas = 236,
        AnoPublicacao = 2020,
        PossuiISBN = true,
        ISBN = "978-65-86110-00-5"
    };
    

    Bacana! Mas existe outra forma de representar uma estrutura de dados que não seja uma classe? Sim! O C# possui as chamadas Structs, que em determinadas situações podem ser usadas no lugar das classes.

    Banner do Guia Tático Alura sobre carreira em tecnologia, destacando o mapa da carreira tech. A imagem convida a explorar diferentes caminhos profissionais, comparar possibilidades e encontrar a próxima fase da carreira na área de tecnologia, com chamada “Explore o mapa”.

    Mas, afinal, o que são Structs?

    As structs, muito comuns na linguagem C, têm como objetivo estruturar alguns dados comuns a um mesmo contexto, bem parecida com a ideia de classes. No C#, uma struct é semelhante a uma classe, porém esta é definida como sendo um tipo de valor enquanto a classe é um tipo de referência.

    Vamos a um exemplo de definição de uma struct:

    public struct Pessoa
    {
        public int Idade { get; set; }
        public string Nome { get; set; }
        public string Cpf { get; set; }
        public string Email { get; set; }
        public override string ToString()
        {
            return 
    quot;Nome: {this.Nome}" +
                   
    quot;Email: {this.Email}";
        }
    }
    

    Uma struct é muito útil para aquelas situações nas quais precisamos de poucas variáveis, pois os objetos criados com base em structs são mais leves e por ser do tipo de valor não trabalham com referências.

    Uma struct pode possuir construtores, campos, propriedades, métodos, indexadores. Uma struct pode ainda implementar uma interface, porém não existe herança entre structs. Para utilizar um objeto criado com base em uma estrutura, podemos fazer:

    Pessoa pessoa= new();
    pessoa.Cpf = "111.111.111-66";
    pessoa.Nome = "André Silva";
    pessoa.Email = "[email protected]";
    pessoa.Idade = 36;
    

    Ou seja, da mesma forma como criamos uma classe.

    Resumindo as características das structs:

    • É um tipo de valor.
    • Quando definido o construtor o mesmo deve possuir parâmetros.
    • Não é possível iniciar um campo a não ser por seu construtor.
    • Uma struct não pode ser a base de uma outra struct ou classe.

    Usar classes ou struct?

    Mas quando usar classe ou struct?Uma struct possui sintaxe e definição similar a uma classe com algumas limitações mas mesmo assim de fácil entendimento e implementação. Para responder se devemos usar classes ou struct vamos voltar a falar de tipo de valor (value-type) e por referência (reference-type).

    No geral, o compilador trabalha com duas grandes áreas na memória para a manipulação dos dados: stack e heap. Veja na imagem a seguir uma abstração:

    Na imagem é apresentado um retângulo, que contém dois retângulos um menor para a memória stack e um maior para a memória heap.

    A área que define a stacké bem menor em comparação a área do heap, e ambas trabalham como uma abstração de uma pilha ( o último que entra é o primeiro a sair), porém cada uma com um tipo de acesso distinto.

    Quando criamos tipos de dados mais leves como os “tipos primitivos” e structs estes são armazenados diretamente na stack, por serem tipos que consomem pouco espaço em memória. A stack tem uma performance bem melhor na busca de dados em seu interior, por possuir um espaço menor. Por exemplo:

    Na imagem é apresentado um retângulo na cor verde representando a memória stack e em seu interior um retângulo menor em branco com a definição da variável idade do tipo `int` com o valor de 28.

    Na imagem, observe que a declaração da variável idade fica junto a seu valor, daí a definição de tipo de valor (value-type), e o acesso do compilador é bem rápido. Para os tipos mais complexos como classes, objects, interfaces, delegates e strings estes são armazenados no heap como mostrado na imagem a seguir:

    Na imagem é apresentado um retângulo na cor verde representando a memória stack e em seu interior um retângulo menor em branco com a definição da variável idade do tipo `int` com o valor de 28. e um retângulo maior na cor laranja representando a memória heap definindo um objeto meuLivro do tipo Livro.

    Contudo, o compilador não faz acesso direto a heap. Por que? A resposta é: por ser uma área muito grande! E, no caso de procurar um objeto do tipo Livro, poderia levar um tempo considerável para otimizar o acesso a heap, por isso o processador faz uso da stack ( que é mais rápida e menor) para fazer essa jogada. O compilador cria uma referência na stack apontando para a memória heap onde está o objeto.

    Na imagem é apresentado um retângulo na cor verde representando a memória stack e em seu interior um retângulo menor em branco com a definição da variável idade do tipo `int` com o valor de 28 e um outro retângulo com a definição de um ponteiro do tipo Livro apontando para o retângulo maior na cor laranja representando a memória heap definindo um objeto meuLivro do tipo Livro.

    Esse espaço na memória stack que aponta para uma posição na heap é o que definimos como ponteiro, e na imagem usamos a notação de asterisco para identificar. Em resumo, declaramos um ponteiro na stack que guarda uma referência para uma posição na heap, daí a definição de tipo de referência (reference-type).

    Tipos de referência são construídos usando a palavra reservada new que indica que um espaço na memória heap deverá ser reservada para um determinado objeto.

    Lembre-se que structs são tipos de valor, ou seja são armazenadas na stack, e esta apesar de ser mais rápida, possui um espaço muito menor em comparação a heap. Portanto, as structs são indicadas para quando necessitarmos de um conjunto de dados menores.

    Por exemplo, no código apresentado para a struct Pessoa, caso fosse necessário um grande número de propriedades e campos, e a instanciação de vários objetos do tipo Pessoa, é mais interessante que o mesmo seja criado como uma classe, para evitar o estouro da memória stack. Na imagem abaixo a representação da struct Pessoa na Stack.

    Na imagem é apresentado um retângulo na cor verde representando a memória stack e em seu interior um retângulo compartimentalizado definindo os campos de uma struct `Pessoa` e com ponteiros que apontam para o retângulo laranja que representa a memória `heap` que contém 3 objetos do tipo string.

    Vale lembrar que a biblioteca de classes do .NET também faz uso de structs para definir uma série de tipos e funcionalidades, por exemplo os tipos como int, float ou bool são structs que herdam de uma classe base object.

    Na imagem é mostrado um recorte do editor de códigos Visual Studio Community mostrando que o tipo int é um struct do tipo `readonly`.

    Outro exemplo é a struct DateTime para trabalharmos a data e hora do sistema em nossas aplicações. Bem bacana não é?

    Conclusão

    Com este artigo, revisitamos brevemente a definição de classes da orientação a objetos e os tipos de valor e tipos por referência para entendermos o que são as structs como defini-las e como elas se diferenciam das classes.

    Utilizar corretamente structs em nossos projetos pode ser um diferencial que confira uma maior performance e entender que nem toda estrutura que seja um pouco mais complexa precisa ser definida em uma classe. E aí, curtiu? Vamos programar! 😉

    Para saber mais sobre classes e structs, veja:

    • Curso C#: orientação a objetos na Alura
    • Curso C#: explorando a linguagem na Alura
    • Artigo POO: o que é programação orientada a objetos? no blog Alura
    • Documentação Oficial da MS Estruturas
    Banner do Guia Tático Alura sobre carreira em tecnologia, destacando o mapa da carreira tech. A imagem convida a explorar diferentes caminhos profissionais, comparar possibilidades e encontrar a próxima fase da carreira na área de tecnologia, com chamada “Explore o mapa”.

    Avalie este artigo

    • Foto de andre-bessa1

      Autor(a)

      andre-bessa1

    Explore por tópico

    • Back-end
    • Dados
    • DevOps
    • Front-end
    • Gestão & Negócios
    • Institucionais
    • Inteligência Artificial
    • Mobile
    • UX & Design

    Leia também

    • 18/01/2009

      2009, ano do Ruby on Rails no Brasil

      Ler mais
    • 24/04/2016

      Depoimento do aluno: Wanderson Macêdo

      Ler mais
    • 10/01/2023

      Java: o que é, linguagem e um Guia para iniciar na tecnologia

      Ler mais
    Ver mais conteúdos

    Inscreva-se em nossa Newsletter

    Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.

    Institucional

    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status
    Institucional
    • Sobre nós
    • Trabalhe Conosco
    • Para Empresas
    • Para Escolas
    • Política de Privacidade
    • Compromisso de Integridade
    • Termos de Uso
    • Canal de Ética
    • Código de Ética
    • Fale Conosco
    • Documentos Institucionais
    • Status

    A Alura

    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes
    A Alura
    • Como Funciona
    • Inteligência Artificial
    • Plataforma
    • Depoimentos
    • Instrutores(as)
    • Dev em <T>
    • Luri, a Inteligência Artificial da Alura
    • IA Conference
    • Cursos Imersivos
    • Perguntas Frequentes

    Conteúdos

    • Alura Cases
    • Imersão Engenharia de Software: Dev na Era da IA
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Conteúdos
    • Alura Cases
    • Imersão Engenharia de Software: Dev na Era da IA
    • Artigos
    • Podcasts
    • Artigos de educação corporativa
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Uma Empresa do GrupoLogo Grupo Alun

    Outras empresas do Grupo Alun

    • FIAP
    • STARTSE
    • PM3
    • LUMINA

    Ao submeter seu e-mail, você concorda com a política de privacidade da Alura.

    Redes Sociais & Apps

    instagram
    youtube
    tiktok
    x
    appStore
    googlePlay
    Alura