A property setter can validate a value before storing it.

validation Validation keeps object state inside allowed rules.

Validation Properties

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

class Thermostat
{
    private int temperature;

    public int Temperature
    {
        get { return temperature; }
        set
        {
            if (value < 50)
            {
                temperature = 50;
            }
            else if (value > 80)
            {
                temperature = 80;
            }
            else
            {
                temperature = value;
            }
        }
    }
}

class Program
{
    static void Main()
    {
        int requested = 72;
        Thermostat thermostat = new Thermostat();
        thermostat.Temperature = requested;

        Console.WriteLine($"requested={requested}");
        Console.WriteLine($"stored={thermostat.Temperature}");
    }
}
using System;

class Thermostat
{
    private int temperature;

    public int Temperature
    {
        get { return temperature; }
        set
        {
            if (value < 50)
            {
                temperature = 50;
            }
            else if (value > 80)
            {
                temperature = 80;
            }
            else
            {
                temperature = value;
            }
        }
    }
}

class Program
{
    static void Main()
    {
        int requested = 45;
        Thermostat thermostat = new Thermostat();
        thermostat.Temperature = requested;

        Console.WriteLine($"requested={requested}");
        Console.WriteLine($"stored={thermostat.Temperature}");
    }
}
using System;

class Thermostat
{
    private int temperature;

    public int Temperature
    {
        get { return temperature; }
        set
        {
            if (value < 50)
            {
                temperature = 50;
            }
            else if (value > 80)
            {
                temperature = 80;
            }
            else
            {
                temperature = value;
            }
        }
    }
}

class Program
{
    static void Main()
    {
        int requested = 90;
        Thermostat thermostat = new Thermostat();
        thermostat.Temperature = requested;

        Console.WriteLine($"requested={requested}");
        Console.WriteLine($"stored={thermostat.Temperature}");
    }
}
  1. requested ← 72, thermostat ← Thermostat

    29{30    static void Main()31    {32        int requested→ 72 = 72; //@requested=45, 9033        Thermostat thermostat→ Thermostat = new Thermostat();34        thermostat.Temperature = requested72;
  2. temperature ← 72

    19}20else21{22    temperature→ 72 = value72;23}
  3. get

    pass 1 of 7
    8{9    get { return temperature72; }10    set
  4. thermostat.Temperature ← 72

    33Thermostat thermostat = new Thermostat();34thermostat.Temperature→ 72 = requested72;3536Console.WriteLine($"requested={requested72}");37Console.WriteLine($"stored={thermostat.Temperature}");
    outputrequested=72
  5. Console.WriteLine($"stored={thermostat.Temperature}");

    36    Console.WriteLine($"requested={requested}");37    Console.WriteLine($"stored={thermostat.Temperature72}");38}
  6. Console.WriteLine($"stored={thermostat.Temperature}");

    36    Console.WriteLine($"requested={requested}");37    Console.WriteLine($"stored={thermostat.Temperature72}");38}
    outputstored=72
  1. requested ← 45, thermostat ← Thermostat

    29{30    static void Main()31    {32        int requested→ 45 = 45;33        Thermostat thermostat→ Thermostat = new Thermostat();34        thermostat.Temperature = requested45;
  2. temperature ← 50

    11{12    if (value45 < 50)13    {14        temperature→ 50 = 50;15    }
  3. get

    pass 1 of 7
    8{9    get { return temperature50; }10    set
  4. thermostat.Temperature ← 50

    33Thermostat thermostat = new Thermostat();34thermostat.Temperature→ 50 = requested45;3536Console.WriteLine($"requested={requested45}");37Console.WriteLine($"stored={thermostat.Temperature}");
    outputrequested=45
  5. Console.WriteLine($"stored={thermostat.Temperature}");

    36    Console.WriteLine($"requested={requested}");37    Console.WriteLine($"stored={thermostat.Temperature50}");38}
  6. Console.WriteLine($"stored={thermostat.Temperature}");

    36    Console.WriteLine($"requested={requested}");37    Console.WriteLine($"stored={thermostat.Temperature50}");38}
    outputstored=50
  1. requested ← 90, thermostat ← Thermostat

    29{30    static void Main()31    {32        int requested→ 90 = 90;33        Thermostat thermostat→ Thermostat = new Thermostat();34        thermostat.Temperature = requested90;
  2. temperature ← 80

    15}16else if (value90 > 80)17{18    temperature→ 80 = 80;19}
  3. get

    pass 1 of 7
    8{9    get { return temperature80; }10    set
  4. thermostat.Temperature ← 80

    33Thermostat thermostat = new Thermostat();34thermostat.Temperature→ 80 = requested90;3536Console.WriteLine($"requested={requested90}");37Console.WriteLine($"stored={thermostat.Temperature}");
    outputrequested=90
  5. Console.WriteLine($"stored={thermostat.Temperature}");

    36    Console.WriteLine($"requested={requested}");37    Console.WriteLine($"stored={thermostat.Temperature80}");38}
  6. Console.WriteLine($"stored={thermostat.Temperature}");

    36    Console.WriteLine($"requested={requested}");37    Console.WriteLine($"stored={thermostat.Temperature80}");38}
    outputstored=80