Properties and Encapsulation
Validation Properties
A property setter can validate a value before storing it.
validation
Validation keeps object state inside allowed rules.
Validation Properties
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}");
}
}
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;temperature ← 72
19}20else21{22 temperature→ 72 = value72;23}get
pass 1 of 78{9 get { return temperature72; }10 setthermostat.Temperature ← 72
33Thermostat thermostat = new Thermostat();34thermostat.Temperature→ 72 = requested72;3536Console.WriteLine($"requested={requested72}");37Console.WriteLine($"stored={thermostat.Temperature}");outputrequested=72Console.WriteLine($"stored={thermostat.Temperature}");
36 Console.WriteLine($"requested={requested}");37 Console.WriteLine($"stored={thermostat.Temperature72}");38}Console.WriteLine($"stored={thermostat.Temperature}");
36 Console.WriteLine($"requested={requested}");37 Console.WriteLine($"stored={thermostat.Temperature72}");38}outputstored=72
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;temperature ← 50
11{12 if (value45 < 50)13 {14 temperature→ 50 = 50;15 }get
pass 1 of 78{9 get { return temperature50; }10 setthermostat.Temperature ← 50
33Thermostat thermostat = new Thermostat();34thermostat.Temperature→ 50 = requested45;3536Console.WriteLine($"requested={requested45}");37Console.WriteLine($"stored={thermostat.Temperature}");outputrequested=45Console.WriteLine($"stored={thermostat.Temperature}");
36 Console.WriteLine($"requested={requested}");37 Console.WriteLine($"stored={thermostat.Temperature50}");38}Console.WriteLine($"stored={thermostat.Temperature}");
36 Console.WriteLine($"requested={requested}");37 Console.WriteLine($"stored={thermostat.Temperature50}");38}outputstored=50
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;temperature ← 80
15}16else if (value90 > 80)17{18 temperature→ 80 = 80;19}get
pass 1 of 78{9 get { return temperature80; }10 setthermostat.Temperature ← 80
33Thermostat thermostat = new Thermostat();34thermostat.Temperature→ 80 = requested90;3536Console.WriteLine($"requested={requested90}");37Console.WriteLine($"stored={thermostat.Temperature}");outputrequested=90Console.WriteLine($"stored={thermostat.Temperature}");
36 Console.WriteLine($"requested={requested}");37 Console.WriteLine($"stored={thermostat.Temperature80}");38}Console.WriteLine($"stored={thermostat.Temperature}");
36 Console.WriteLine($"requested={requested}");37 Console.WriteLine($"stored={thermostat.Temperature80}");38}outputstored=80