Lab: Computed Properties#
Objective#
In this lab, we will delve into the practical usage of computed properties. We aim to understand how computed properties can make our code more concise and maintainable by encapsulating calculations within property accessors.
Provided Code#
Carefully review the provided code. Notice how the Rectangle
class has two public
properties, called Width
and Height
, with both get
and set
accessors.
class Rectangle
{
public double Width { get; set; }
public double Height { get; set; }
}
Instructions#
Step 1: Introduce a property called Area
with a get
accessor#
First, let’s add a computed property to the Rectangle
class called Area
. Define a read-only property Area
that computes the area as the product of Width
and Height
.
Instantiate a Rectangle
object, assign values to Width
and Height
, and use Console.WriteLine
to print the area.
Rectangle rect = new Rectangle { Width = 4, Height = 5 };
Console.WriteLine(rect.Area);
20
Step 2: Add a set
accessor to Area
#
Now, add a set
accessor to the Area
property. For simplicity, when the area is set, adjust the Width
and Height
such that the rectangle becomes a square with the given area. Implement the setter inside the Area
property.
Test the setter by setting the Area
property of the Rectangle
object and then print the Width
, Height
, and Area
to check that they all updated correctly.
Rectangle rect = new Rectangle { Width = 10, Height = 8 };
rect.Area = 25;
Console.WriteLine($"{rect.Width} x {rect.Height} = {rect.Area}");
5 x 5 = 25
🤔 Reflection
When setting the Area
we’re assuming that the Rectangle
is a square. Are there other sensible assumptions we could have made when implementing this set
accessor?
Step 3: Add a property called Perimeter
#
Now we will enhance our Rectangle
class further by adding another computed property named Perimeter
. The get
accessor should calculate the perimeter of the rectangle based on its Width
and Height
, while the set
accessor should set the Width
and Height
based on the given perimeter.
Instantiate a Rectangle
object, set its Width
and Height
, and use Console.WriteLine
to print out the Perimeter
.
Rectangle rect = new Rectangle { Width = 4, Height = 5 };
rect.Perimeter = 100;
Console.WriteLine($"{rect.Width} + {rect.Width} + {rect.Height} + {rect.Height} = {rect.Perimeter}");
25 + 25 + 25 + 25 = 100
🤔 Reflection
How does this property enhance the usability and functionality of the Rectangle
class?