Init-only properties are assigned during object creation.

init property An `init` property can be set in an object initializer and then treated as fixed.

Init Properties

age
InitProperties.cs
Replay: real traced execution (multi-file project)
using System;

class Profile
{
    public string Name { get; init; } = "";
    public int Age { get; init; }

    public override string ToString()
    {
        return Name + ":" + Age;
    }
}

class Program
{
    static void Main()
    {
        int age = 30;
        Profile profile = new Profile { Name = "Dana", Age = age };
        string summary = profile.Name + ":" + profile.Age;

        Console.WriteLine($"age={age}");
        Console.WriteLine($"summary={summary}");
    }
}
using System;

class Profile
{
    public string Name { get; init; } = "";
    public int Age { get; init; }

    public override string ToString()
    {
        return Name + ":" + Age;
    }
}

class Program
{
    static void Main()
    {
        int age = 18;
        Profile profile = new Profile { Name = "Dana", Age = age };
        string summary = profile.Name + ":" + profile.Age;

        Console.WriteLine($"age={age}");
        Console.WriteLine($"summary={summary}");
    }
}
using System;

class Profile
{
    public string Name { get; init; } = "";
    public int Age { get; init; }

    public override string ToString()
    {
        return Name + ":" + Age;
    }
}

class Program
{
    static void Main()
    {
        int age = 45;
        Profile profile = new Profile { Name = "Dana", Age = age };
        string summary = profile.Name + ":" + profile.Age;

        Console.WriteLine($"age={age}");
        Console.WriteLine($"summary={summary}");
    }
}
  1. age ← 30, profile ← Dana:30, summary ← Dana:30

    15{16    static void Main()17    {18        int age→ 30 = 30; //@age=18, 4519        Profile profile→ Dana:30 = new Profile { Name = "Dana", Age = age };20        string summary→ Dana:30 = profile.NameDana + ":" + profile.Age30;2122        Console.WriteLine($"age={age30}");23        Console.WriteLine($"summary={summaryDana:30}");24    }
    outputage=30
    summary=Dana:30
  1. age ← 18, profile ← Dana:18, summary ← Dana:18

    15{16    static void Main()17    {18        int age→ 18 = 18;19        Profile profile→ Dana:18 = new Profile { Name = "Dana", Age = age };20        string summary→ Dana:18 = profile.NameDana + ":" + profile.Age18;2122        Console.WriteLine($"age={age18}");23        Console.WriteLine($"summary={summaryDana:18}");24    }
    outputage=18
    summary=Dana:18
  1. age ← 45, profile ← Dana:45, summary ← Dana:45

    15{16    static void Main()17    {18        int age→ 45 = 45;19        Profile profile→ Dana:45 = new Profile { Name = "Dana", Age = age };20        string summary→ Dana:45 = profile.NameDana + ":" + profile.Age45;2122        Console.WriteLine($"age={age45}");23        Console.WriteLine($"summary={summaryDana:45}");24    }
    outputage=45
    summary=Dana:45