0Pricing
C# Academy · Lección

Structs: semántica de valor y patrón de inmutabilidad

Comprenda la semántica de valor de los struct en C# 6 y cree un patrón de struct inmutable (copiar al cambiar).

Structs: semántica de valor y patrón de inmutabilidad es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 3 lecciones en total.

Descripción general de los structs

Objetivo: usar structs de forma segura.

  • Semántica de valor (se copian al asignar)
  • Patrón de struct inmutable en C# 6
  • Pasar por valor frente a pasar por referencia
  • Nota sobre boxing

Semántica de copia

Los structs son tipos de valor: la asignación crea una copia. Cambiar la copia no cambia el original.

using System;

// Simple struct with public fields for demo (okay for small POD data)
public struct Point
{
  public int X;
  public int Y;
}

public class Program
{
  public static void Main(string[] args)
  {
    Point a = new Point();
    a.X = 1; a.Y = 2;

    Point b = a;     // copy the value
    b.X = 9;         // change the copy

    Console.WriteLine("a=(" + a.X + "," + a.Y + ")");
    Console.WriteLine("b=(" + b.X + "," + b.Y + ")"); // different from a
  }
}

Patrón de struct inmutable

Prefiera los structs inmutables: campos readonly, un constructor para el estado obligatorio y pequeños auxiliares With para crear valores nuevos.

using System;

// Immutable struct pattern (C# 6): readonly fields + constructor + With method
public struct Money
{
  private readonly decimal _amount;
  private readonly string _currency;

  public decimal Amount { get { return _amount; } }
  public string Currency { get { return _currency; } }

  public Money(decimal amount, string currency)
  {
    _amount = amount;
    _currency = currency ?? "USD";
  }

  // Copy-on-change: returns a new value with updated amount
  public Money WithAmount(decimal amount)
  {
    return new Money(amount, _currency);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Money m1 = new Money(10m, "USD");
    Money m2 = m1.WithAmount(15m); // new value

    Console.WriteLine("m1: " + m1.Amount + " " + m1.Currency);
    Console.WriteLine("m2: " + m2.Amount + " " + m2.Currency);
  }
}

Por valor frente a por referencia

De forma predeterminada, los métodos reciben una copia. Use ref para modificar el struct del llamador.

using System;

public struct Counter
{
  public int Value;
}

public class Program
{
  static void IncrementByValue(Counter c)
  {
    c.Value = c.Value + 1; // changes only the local copy
  }

  static void IncrementByRef(ref Counter c)
  {
    c.Value = c.Value + 1; // changes the caller's variable
  }

  public static void Main(string[] args)
  {
    Counter a = new Counter();
    IncrementByValue(a);
    Console.WriteLine("After by-value: " + a.Value); // 0

    IncrementByRef(ref a);
    Console.WriteLine("After by-ref: " + a.Value);   // 1
  }
}

Conceptos básicos de boxing

Boxing copia un struct en una referencia a objeto o interfaz. Unboxing crea otra copia.

using System;

public interface IShow { string Show(); }

public struct Temperature : IShow
{
  public int C;
  public string Show() { return C + "C"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Temperature t = new Temperature();
    t.C = 25;

    object boxed = t;              // boxing: copy into object
    Temperature copy = (Temperature)boxed; // unbox (another copy)
    copy.C = 30;

    Console.WriteLine("t = " + t.C);     // 25
    Console.WriteLine("copy = " + copy.C); // 30
  }
}

Consejos sobre structs

Consejos:

  • Use structs para objetos de valor pequeños e inmutables (coordenadas, dinero).
  • Evite los structs grandes o muy mutables.
  • Recuerde que se crean copias al asignar y al pasar por valor.
  • Tenga en cuenta el boxing al convertir a object o interface.

Semántica de valor de un struct

Comprobación rápida: ¿Qué describe mejor la semántica de valor de un struct en C#?

Repaso

Repaso: los structs son tipos de valor. Prefiera diseños pequeños e inmutables (constructor + campos readonly + With). Sepa cómo afectan a las copias el paso por valor frente a ref y el boxing.

Preguntas frecuentes

¿La lección «Structs: semántica de valor y patrón de inmutabilidad» es gratis?

Sí — el texto completo de «Structs: semántica de valor y patrón de inmutabilidad» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 3 lecciones en total.

¿Qué aprenderé en «Structs: semántica de valor y patrón de inmutabilidad»?

Comprenda la semántica de valor de los struct en C# 6 y cree un patrón de struct inmutable (copiar al cambiar). Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 3.

¿Cuánto tiempo toma la lección «Structs: semántica de valor y patrón de inmutabilidad»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Structs: semántica de valor y patrón de inmutabilidad
  2. Tipos similares a records e igualdad basada en valores (patrón)
  3. Enums y [Flags]
← Volver a C# Academy