Domine o Raw SQL no EF Core: Guia Completo e Prático
Classes e Structs em C#: Escolhendo a Mala Ideal para Viagem
Imagine que você está fazendo as malas para uma viagem. Você pode escolher entre uma mala grande (classe) ou uma mala pequena (struct). Ambas vão guardar o que você precisa, mas há algumas diferenças importantes: na mala grande, você pode colocar muitas coisas e até mesmo ter compartimentos extras (funcionalidades avançadas), enquanto na mala pequena, o foco é guardar poucos itens com eficiência
⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!Descubra como medir, diagnosticar e otimizar performance em aplicações .NET com dicas práticas e ferramentas essenciais para devs.. Em C#, essa analogia ilustra a diferença entre Classes e Structs: cada uma tem seu propósito e suas vantagens.
A seguir, exploraremos as particularidades de cada opção para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! você não quebrar a cabeça na hora de decidir.
Tabela de Conteúdo🔗
1. A Diferença Fundamental: Referência vs. Valor
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança.
2. Definições Básicas: O Que São Classes e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Structs?
3. Alocação de Memória
📉 Alocações Zero: Escreva Código Sem Gerar Lixo!Aprenda a evitar alocações desnecessárias em C# aplicando técnicas com structs, stackalloc, Span<T> e pooling para uma performance ideal.: Stack vs Heap
4. Semântica de Passagem: Valor
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. vs Referência
5. Quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Usar Struct?
6. Quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Usar Classe?
7. Memória e Performance
🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos!
8. Exemplos Práticos em Código
9. Boas Práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados.: Dicas Finais
10. Armadilhas Comuns
🔏 Criptografia Assimétrica: Domine RSA e Troca de Chaves!Descubra como a criptografia assimétrica protege a troca de chaves e garante segurança em sistemas digitais usando RSA, C# e práticas recomendadas. (e Como Evitá-las)
A Diferença Fundamental: Referência vs. Valor🔗
A principal diferença entre classes e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. structs no C# está no modo como elas são armazenadas e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. passadas entre partes do programa:
- Classes são tipos de referência. Quando você cria uma classe, a variável
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. guarda um endereço de memória onde o objeto real está localizado. Ao passar essa variável
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. para um método, você está passando uma referência ao mesmo local na memória. - Structs são tipos de valor
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança.. Quando você instancia um struct, a variável guarda diretamente os dados. Ao passar essa variável
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. para um método, uma cópia
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster. dos dados é passada, não a referência.
Definições Básicas: O Que São Classes e Structs?🔗
Classes são tipos de referência:
- ✅ Ideais para objetos complexos
📊 LINQ com Objetos Complexos: Consultas que Respeitam a Hierarquia!Aprenda técnicas profissionais com LINQ para navegar em estruturas hierárquicas e otimizar consultas complexas em sistemas reais de dados. - ✅ Herança e polimorfismo
🎭 Polimorfismo: Crie Métodos que se Transformam como um Camaleão!Descubra como o polimorfismo permite métodos versáteis em C#. Veja exemplos práticos e dicas para dominar OOP de forma flexível e robusta. - ✅ Nullable por padrão
- ✅ Leves e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. rápidos - ✅ Imutabilidade
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. preferida - ❌ Não permitem herança
🧬 Herança: Reutilize Código sem Copiar e Colar (como um Jedi)!Aprenda a utilizar herança em C# para criar hierarquias de classes, reaproveitar código e manter projetos organizados de forma simples e escalável.
public class Carro // Classe típica
{
public string Modelo { get; set; }
public void Ligar() => Console.WriteLine("Vrum!");
}
public struct Coordenada // Struct ideal
{
public int X { get; }
public int Y { get; }
public Coordenada(int x, int y) => (X, Y) = (x, y);
}
Alocação de Memória: Stack vs Heap🔗
| Característica | Stack | Heap |
|---|---|---|
| Velocidade | ⚡ Ultra-rápido | 🐢 Mais lento |
| Gerenciamento | Automático (escopo) | GC (Garbage Collector) |
| Tamanho | Pequenos dados | Objetos grandes |
| Acesso | Ordem LIFO | Aleatório |
| Exemplos | Structs, tipos primitivos | Classes, arrays |
Regra prática: Structs vivem no stack (quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. locais), classes no heap. Mas em certos casos structs podem acabar no heap (boxing)!
Semântica de Passagem: Valor vs Referência🔗
Teste prático:
var classe = new MinhaClasse { Valor = 10 };
var struct = new MinhaStruct { Valor = 10 };
Modificar(classe, struct);
Console.WriteLine($"Classe: {classe.Valor}"); // 20
Console.WriteLine($"Struct: {struct.Valor}"); // 10
void Modificar(MinhaClasse c, MinhaStruct s)
{
c.Valor = 20;
s.Valor = 20;
}
👉 Key Insight: Structs são copiados integralmente a cada passagem. Classes passam "referências" ao objeto original.
Quando Usar Struct?🔗
Os structs são ideais para cenários
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. em que você precisa:
- De objetos pequenos e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. imutáveis
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. (ou com pouca mutabilidade). - Manipular lotes grandes de dados “simples”, porém com alta frequência (e onde cada cópia
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster. de dados seja relativamente barata em termos de custo). - Garantir que a atribuição
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. e a passagem de dados criem cópias independentes.
Exemplo do mundo real: coordenadas de um ponto no espaço (x, y), dimensões de um retângulo (largura, altura) ou dados simples como cores (RGBA).
Quando Usar Classe?🔗
As classes são recomendadas quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.:
- Você precisa de herança ou polimorfismo
🎭 Polimorfismo: Crie Métodos que se Transformam como um Camaleão!Descubra como o polimorfismo permite métodos versáteis em C#. Veja exemplos práticos e dicas para dominar OOP de forma flexível e robusta. (struct não oferece isso). - O tamanho do seu objeto é grande o bastante para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! que copiar todos os dados seja custoso. - Você quer que várias variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código./métodos “apontem” para a mesma instância, compartilhando a mesma memória. - Precisa de métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. mais complexos e comportamentos que vão além de um “contenedor de dados simples”.
Exemplo do mundo real: qualquer entidade maior ou mais complexa, como “Cliente” num sistema de vendas
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. ou “Jogador” num game online, em que esses objetos precisam carregar muita informação e interagir com outras partes do sistema.
Memória e Performance🔗
- Um struct geralmente é alocado na stack (pilha), ou dentro de outro objeto como campo, podendo ser muito mais rápido de acessar quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. seu tamanho é pequeno. - Uma classe vive no heap (gerenciado pelo Garbage Collector
⚡ Otimização Unity: Object Pooling e GC Avoidance!Descubra técnicas essenciais de Object Pooling e estratégias GC Avoidance no Unity para otimizar a performance dos seus jogos e evitar pausas indesejadas.). Para objetos grandes, chega a ser mais vantajoso ter apenas uma alocação e trabalhar com referências, evitando cópias gigantes.
De forma resumida:
- Struct: alocação
📉 Alocações Zero: Escreva Código Sem Gerar Lixo!Aprenda a evitar alocações desnecessárias em C# aplicando técnicas com structs, stackalloc, Span<T> e pooling para uma performance ideal. direta, rápido para objetos pelo menos pequenos e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. sem comportamentos complexos. - Classe: flexibilidade, escalabilidade
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e polimorfismo. Custos de alocação e gerenciamento mais altos, mas evita a duplicação de dados na memória.
Exemplos Práticos em Código🔗
Abaixo, um exemplo simples que ilustra a diferença de comportamento entre struct e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. classe. Suponha que temos uma entidade que guarda a posição (x, y) de um objeto no espaço.
Struct de Posição
public struct PosicaoStruct
{
public int X;
public int Y;
public PosicaoStruct(int x, int y)
{
X = x;
Y = y;
}
}
public class ExemploStruct
{
public void Executar()
{
PosicaoStruct p1 = new PosicaoStruct(10, 20);
PosicaoStruct p2 = p1; // copia o valor de p1
p2.X = 999; // altera p2, não afeta p1, pois é cópia
Console.WriteLine($"p1.X = {p1.X}, p2.X = {p2.X}");
// Resultado: p1.X = 10, p2.X = 999
}
}
Classe de Posição
public class PosicaoClass
{
public int X;
public int Y;
public PosicaoClass(int x, int y)
{
X = x;
Y = y;
}
}
public class ExemploClasse
{
public void Executar()
{
PosicaoClass p1 = new PosicaoClass(10, 20);
PosicaoClass p2 = p1; // p2 é uma referência ao mesmo objeto
p2.X = 999; // altera tanto p2 quanto p1
Console.WriteLine($"p1.X = {p1.X}, p2.X = {p2.X}");
// Resultado: p1.X = 999, p2.X = 999
}
}
Observe como struct e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. classe se comportam de maneira distinta ao atribuirmos de uma variável
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. para outra:
- Struct: cópia
Criando e Escalando Serviços no Docker SwarmDescubra como criar, gerenciar e escalar serviços no Docker Swarm, utilizando comandos simples para manter alta disponibilidade em seu cluster.. - Classe: mesma referência.
Boas Práticas: Dicas Finais🔗
- Tamanho do struct: structs muito grandes podem prejudicar a performance
🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos!, pois cada cópia envolve muitos dados. Uma regra informal é manter structs relativamente pequenos (até ~16 bytes ou algumas poucas variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. dentro). - Imutabilidade
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance.: se um dado é naturalmente imutável
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance., usar struct pode ser vantajoso, pois evita efeitos colaterais. Exemplo: um struct que representa uma cor RGBA. - Referências nulas: classes podem ser
null, mas
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. structs não podem por padrão (a menos que sejam nullable structs). Isso pode afetar o design do seu código. - Escopo
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código.: escolha classes para representar entidades complexas com muitos métodos
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência., comportamentos e possibilidade de extensões, e structs para objetos básicos que funcionam como “blocos de construção”.
Em resumo
🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades!, escolher entre classe e struct não se resume a “um é melhor que o outro”. Cada um atende a necessidades diferentes. Se você mantiver em mente o comportamento de referência vs. valor, vai fazer a escolha certa e evitar muitas dores de cabeça no futuro.
Armadilhas Comuns (e Como Evitá-las)🔗
1. Boxing Desnecessário:
object obj = new MinhaStruct(); // Boxing! GC entra em ação
2. Structs Grandes:
public struct BigData // 64 bytes! 😱
{
public long A, B, C, D, E, F, G, H;
// Cada passagem copia 64 bytes...
}
3. Mutabilidade Inesperada:
public struct Config
{
public int Timeout; // Mutável = perigoso!
// Solução:
public readonly int Timeout { get; init; }
}
Pro Tip: Use readonly struct e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. in parameters para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! structs grandes:
public void Processar(in MeuStructGrande dados) { ... }
Próximos Passos🔗
Dominou essas diferenças? No próximo artigo vamos desvendar Construtores
🔑 Construtores: Inicialize Objetos como um Arquiteto de OOP!Descubra como os construtores em C# estruturam objetos, garantindo inicialização segura e promovendo boas práticas de desenvolvimento orientado a objetos.: Inicialize Objetos como um Arquiteto de OOP! – onde você vai aprender padrões avançados de inicialização e até criar objetos imutáveis
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. como um profissional!
// Bônus: Teste Seu Conhecimento
public struct Teste
{
public int Valor;
}
var t1 = new Teste { Valor = 10 };
var t2 = t1;
t2.Valor = 20;
Console.WriteLine(t1.Valor); // Qual o resultado?
Esse artigo combinado reúne as informações mais relevantes de ambos os textos, mantendo a formatação e o estilo original, enquanto
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! organiza o conteúdo de forma mais coesa e detalhada.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 8 months atrás
há 8 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás