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,4Um 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,0Expondo 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); // 200Membros 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); // 5Estruturas 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 USDEncadeando 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); // 16Construtor 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); // 100A 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 99Inicializando 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); // 7Desconstruçã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,8Combinando 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); // 77Verificaçã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 structpara 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
- Construtores primários em classes
- Capturando parâmetros em membros
- Construtores primários com structs
- Combinando com propriedades e tipos base