Properties and Encapsulation
Private Fields
A private field stores data that only the class can change directly.
private field
A private field hides storage behind public methods or properties.
Private Fields
PrivateFields.cs
Replay: real traced execution (multi-file project)
using System;
class Score
{
private int points;
public int Points
{
get { return points; }
}
public void Add(int amount)
{
points += amount;
}
}
class Program
{
static void Main()
{
int bonus = 3;
Score score = new Score();
score.Add(10);
score.Add(bonus);
Console.WriteLine($"bonus={bonus}");
Console.WriteLine($"points={score.Points}");
}
}
using System;
class Score
{
private int points;
public int Points
{
get { return points; }
}
public void Add(int amount)
{
points += amount;
}
}
class Program
{
static void Main()
{
int bonus = 1;
Score score = new Score();
score.Add(10);
score.Add(bonus);
Console.WriteLine($"bonus={bonus}");
Console.WriteLine($"points={score.Points}");
}
}
using System;
class Score
{
private int points;
public int Points
{
get { return points; }
}
public void Add(int amount)
{
points += amount;
}
}
class Program
{
static void Main()
{
int bonus = 5;
Score score = new Score();
score.Add(10);
score.Add(bonus);
Console.WriteLine($"bonus={bonus}");
Console.WriteLine($"points={score.Points}");
}
}
bonus ← 3, score ← Score
19{20 static void Main()21 {22 int bonus→ 3 = 3; //@bonus=1, 523 Score score→ Score = new Score();24 scoreScore.Add(10);25 score.Add(bonus);points ← 10
pass 1 of 212public void Add(int amount10)13{14 points→ 10 += amount10;15}score.Add(10);
23Score score = new Score();24scoreScore.Add(10);25scoreScore.Add(bonus3);points ← 13
pass 2 of 212public void Add(int amount3)13{14 points→ 13 += amount3;15}score.Add(bonus);
24score.Add(10);25scoreScore.Add(bonus3);2627Console.WriteLine($"bonus={bonus3}");28Console.WriteLine($"points={score.Points}");outputbonus=3get
pass 1 of 58{9 get { return points13; }10}Console.WriteLine($"points={score.Points}");
27 Console.WriteLine($"bonus={bonus}");28 Console.WriteLine($"points={score.Points13}");29}Console.WriteLine($"points={score.Points}");
27 Console.WriteLine($"bonus={bonus}");28 Console.WriteLine($"points={score.Points13}");29}outputpoints=13
bonus ← 1, score ← Score
19{20 static void Main()21 {22 int bonus→ 1 = 1;23 Score score→ Score = new Score();24 scoreScore.Add(10);25 score.Add(bonus);points ← 10
pass 1 of 212public void Add(int amount10)13{14 points→ 10 += amount10;15}score.Add(10);
23Score score = new Score();24scoreScore.Add(10);25scoreScore.Add(bonus1);points ← 11
pass 2 of 212public void Add(int amount1)13{14 points→ 11 += amount1;15}score.Add(bonus);
24score.Add(10);25scoreScore.Add(bonus1);2627Console.WriteLine($"bonus={bonus1}");28Console.WriteLine($"points={score.Points}");outputbonus=1get
pass 1 of 58{9 get { return points11; }10}Console.WriteLine($"points={score.Points}");
27 Console.WriteLine($"bonus={bonus}");28 Console.WriteLine($"points={score.Points11}");29}Console.WriteLine($"points={score.Points}");
27 Console.WriteLine($"bonus={bonus}");28 Console.WriteLine($"points={score.Points11}");29}outputpoints=11
bonus ← 5, score ← Score
19{20 static void Main()21 {22 int bonus→ 5 = 5;23 Score score→ Score = new Score();24 scoreScore.Add(10);25 score.Add(bonus);points ← 10
pass 1 of 212public void Add(int amount10)13{14 points→ 10 += amount10;15}score.Add(10);
23Score score = new Score();24scoreScore.Add(10);25scoreScore.Add(bonus5);points ← 15
pass 2 of 212public void Add(int amount5)13{14 points→ 15 += amount5;15}score.Add(bonus);
24score.Add(10);25scoreScore.Add(bonus5);2627Console.WriteLine($"bonus={bonus5}");28Console.WriteLine($"points={score.Points}");outputbonus=5get
pass 1 of 58{9 get { return points15; }10}Console.WriteLine($"points={score.Points}");
27 Console.WriteLine($"bonus={bonus}");28 Console.WriteLine($"points={score.Points15}");29}Console.WriteLine($"points={score.Points}");
27 Console.WriteLine($"bonus={bonus}");28 Console.WriteLine($"points={score.Points15}");29}outputpoints=15