A get-only property can be assigned in a constructor and read afterward.

get-only property A get-only property protects a value from later assignment outside the class.

Get-Only Properties

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

class Badge
{
    public string Label { get; }
    public int Level { get; }

    public Badge(string label, int level)
    {
        Label = label;
        Level = level;
    }
}

class Program
{
    static void Main()
    {
        int level = 2;
        Badge badge = new Badge("helper", level);
        string summary = badge.Label + ":" + badge.Level;

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

class Badge
{
    public string Label { get; }
    public int Level { get; }

    public Badge(string label, int level)
    {
        Label = label;
        Level = level;
    }
}

class Program
{
    static void Main()
    {
        int level = 1;
        Badge badge = new Badge("helper", level);
        string summary = badge.Label + ":" + badge.Level;

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

class Badge
{
    public string Label { get; }
    public int Level { get; }

    public Badge(string label, int level)
    {
        Label = label;
        Level = level;
    }
}

class Program
{
    static void Main()
    {
        int level = 4;
        Badge badge = new Badge("helper", level);
        string summary = badge.Label + ":" + badge.Level;

        Console.WriteLine($"level={level}");
        Console.WriteLine($"summary={summary}");
    }
}
  1. level ← 2

    16{17    static void Main()18    {19        int level→ 2 = 2; //@level=1, 420        Badge badge = new Badge("helper", level);21        string summary = badge.Label + ":" + badge.Level;
  2. public Badge(string label, int level)

    8public Badge(string labelhelper, int level2)9{10    Label = labelhelper;11    Level = level2;12}
  3. badge ← Badge, summary ← helper:2

    19    int level = 2; //@level=1, 420    Badge badge→ Badge = new Badge("helper", level);21    string summary→ helper:2 = badge.Labelhelper + ":" + badge.Level2;2223    Console.WriteLine($"level={level2}");24    Console.WriteLine($"summary={summaryhelper:2}");25}
    outputlevel=2
    summary=helper:2
  1. level ← 1

    16{17    static void Main()18    {19        int level→ 1 = 1;20        Badge badge = new Badge("helper", level);21        string summary = badge.Label + ":" + badge.Level;
  2. public Badge(string label, int level)

    8public Badge(string labelhelper, int level1)9{10    Label = labelhelper;11    Level = level1;12}
  3. badge ← Badge, summary ← helper:1

    19    int level = 1;20    Badge badge→ Badge = new Badge("helper", level);21    string summary→ helper:1 = badge.Labelhelper + ":" + badge.Level1;2223    Console.WriteLine($"level={level1}");24    Console.WriteLine($"summary={summaryhelper:1}");25}
    outputlevel=1
    summary=helper:1
  1. level ← 4

    16{17    static void Main()18    {19        int level→ 4 = 4;20        Badge badge = new Badge("helper", level);21        string summary = badge.Label + ":" + badge.Level;
  2. public Badge(string label, int level)

    8public Badge(string labelhelper, int level4)9{10    Label = labelhelper;11    Level = level4;12}
  3. badge ← Badge, summary ← helper:4

    19    int level = 4;20    Badge badge→ Badge = new Badge("helper", level);21    string summary→ helper:4 = badge.Labelhelper + ":" + badge.Level4;2223    Console.WriteLine($"level={level4}");24    Console.WriteLine($"summary={summaryhelper:4}");25}
    outputlevel=4
    summary=helper:4