0Pricing
C# Academy · Aula

Construtores primários com structs

Aplique construtores primários a tipos de valor.

Construtores primários com structs é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

Construtores primários em estruturas

As estruturas também aceitam construtores primários: struct Point(int x, int y). Eles funcionam de modo muito semelhante ao das classes, declarando parâmetros no cabeçalho.

using System;

struct Point(int x, int y) {
    public int X => x;
    public int Y => y;
}

var p = new Point(3, 4);
Console.WriteLine(p.X + "," + p.Y); // 3,4

Um construtor sem parâmetros ainda existe

As estruturas sempre têm um construtor implícito sem parâmetros, que produz o valor padrão. Um construtor primário adiciona outro com parâmetros ao lado dele.

using System;

struct Vec(int x, int y) {
    public int X => x;
    public int Y => y;
}

var zero = new Vec(); // default: x=0, y=0
Console.WriteLine(zero.X + "," + zero.Y); // 0,0

Expondo parâmetros por meio de propriedades

Assim como nas classes, os parâmetros de construtores primários de estruturas não se tornam propriedades públicas automaticamente; exponha-os explicitamente.

using System;

struct Size(int w, int h) {
    public int Width { get; } = w;
    public int Height { get; } = h;
}

var s = new Size(10, 20);
Console.WriteLine(s.Width * s.Height); // 200

Membros calculados

Os construtores primários de estruturas combinam muito bem com membros calculados cujo corpo é uma expressão.

using System;

struct Complex(double re, double im) {
    public double Magnitude => Math.Sqrt(re * re + im * im);
}

Console.WriteLine(new Complex(3, 4).Magnitude); // 5

Estruturas readonly

Uma readonly struct com um construtor primário garante a imutabilidade. Nenhum membro pode alterar o estado, o que combina perfeitamente com propriedades somente de leitura.

using System;

readonly struct Money(decimal amount, string currency) {
    public decimal Amount { get; } = amount;
    public string Currency { get; } = currency;
    public string Display => Amount.ToString("0.00") + " " + Currency;
}

Console.WriteLine(new Money(5m, "USD").Display); // 5.00 USD

Encadeando ao construtor primário

Os construtores adicionais de uma estrutura devem chamar o construtor primário com : this(...), assim como nas classes.

using System;

struct Square(int side) {
    public int Side => side;
    public int Area => side * side;
    public Square() : this(1) { } // explicit default side
}

Console.WriteLine(new Square(4).Area); // 16

Construtor padrão versus construtor primário

Observe que new Square() pode usar tanto a inicialização implícita com zero quanto o construtor sem parâmetros declarado por você. Se você definir um construtor encadeado, a sua lógica será executada.

using System;

struct Pct(double value) {
    public double Value { get; } = value;
    public Pct() : this(100) { }
}

Console.WriteLine(new Pct().Value); // 100

A semântica de valor permanece

As estruturas continuam sendo copiadas por valor. Um construtor primário não altera isso: atribuir uma estrutura copia todos os seus campos.

using System;

struct Counter(int n) {
    public int N { get; set; } = n;
}

var a = new Counter(1);
var b = a;       // copy
b.N = 99;
Console.WriteLine(a.N + " " + b.N); // 1 99

Inicializando campos mutáveis

Você pode inicializar propriedades ou campos que aceitam atribuição a partir dos parâmetros, embora estruturas imutáveis geralmente sejam preferíveis.

using System;

struct Bag(int capacity) {
    public int Capacity { get; set; } = capacity;
    public int Used { get; set; } = 0;
}

var bag = new Bag(10);
bag.Used = 3;
Console.WriteLine(bag.Capacity - bag.Used); // 7

Desconstrução

Combine um construtor primário com um método Deconstruct para obter uma descompactação semelhante à de uma tupla.

using System;

struct Point(int x, int y) {
    public int X => x;
    public int Y => y;
    public void Deconstruct(out int a, out int b) { a = x; b = y; }
}

var (px, py) = new Point(7, 8);
Console.WriteLine(px + "," + py); // 7,8

Combinando tudo

Um pequeno tipo de valor imutável criado com uma estrutura readonly e um construtor primário.

using System;

readonly struct Temperature(double celsius) {
    public double Celsius { get; } = celsius;
    public double Fahrenheit => Celsius * 9 / 5 + 32;
}

var t = new Temperature(25);
Console.WriteLine(t.Fahrenheit); // 77

Verificação rápida

Teste sua compreensão dos construtores primários com estruturas.

Recapitulação

Você aprendeu sobre construtores primários em estruturas.

  • struct P(int x, int y) declara parâmetros no cabeçalho.
  • O construtor implícito sem parâmetros continua existindo.
  • Combine com readonly struct para criar tipos de valor imutáveis.
  • Os construtores adicionais são encadeados com : this(...).

Perguntas Frequentes

A aula “Construtores primários com structs” é grátis?

Sim — o texto completo de “Construtores primários com structs” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Construtores primários com structs”?

Aplique construtores primários a tipos de valor. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Construtores primários com structs”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Construtores primários em classes
  2. Capturando parâmetros em membros
  3. Construtores primários com structs
  4. Combinando com propriedades e tipos base
← Voltar para C# Academy