Roadmap › C# Language — Basics to Advanced › Module: Types in Depth
Lessons in this course (38)
15. Classes, structs, records and enums
Basic★ Must knowLesson 15 of 38
csharp
public class Customer // reference type, identity semantics
{
public int Id { get; init; }
public required string Name { get; set; } // required (C# 11)
}
public struct Money(decimal amount, string currency) // value type; primary constructor (C# 12)
{
public decimal Amount { get; } = amount;
public string Currency { get; } = currency;
}
public record Order(int Id, decimal Total); // reference type with VALUE equality
public record struct Coord(double Lat, double Lng);
public enum Status { Pending = 1, Shipped = 2, Delivered = 3 }
[Flags] public enum Perm { None = 0, Read = 1, Write = 2, Delete = 4 }
var p = Perm.Read | Perm.Write;
bool canWrite = p.HasFlag(Perm.Write);
var o1 = new Order(1, 100);
var o2 = o1 with { Total = 120 }; // non-destructive copy
Console.WriteLine(o1 == new Order(1, 100)); // True — value equalityChoose: class for entities with identity/behaviour; struct for small immutable values (< ~16 bytes, no inheritance); record for DTOs and immutable data compared by value.