Source: Ch3_OOP.pdf · EX1.pdf · EX11.pdf · EXXXX.pdf · Bro Code C# Full Course
Encapsulation and Overloading
Access levels, method overloading, constructor overloading, and operator overloading.
Access Specifiers
Access specifiers control visibility: public (everywhere), private (class only), protected (class + subclasses), internal (same assembly). Use the most restrictive level that still works.
class Vehicle
{
public string Brand = "Generic"; // accessible everywhere
private int _mileage = 0; // only inside this class
protected string FuelType = "Gas"; // this class and subclasses
public void Drive(int km) { _mileage += km; }
public int GetMileage() => _mileage;
}
Vehicle v = new Vehicle();
v.Brand = "Toyota";
v.Drive(100);
Console.WriteLine(v.Brand + ": " + v.GetMileage() + " km");Output
Toyota: 100 km
Access Specifiers — Exercise 1
Exposing internal state only through methods is the core of encapsulation — it lets you validate or log changes.
Fix the access violation
Hint
celsius is private. Use SetCelsius() so the validation runs.
Which specifier allows access within the class and in derived classes?
Method Overloading
Overloading defines multiple methods with the same name but different parameter lists. The compiler picks the correct version at compile time based on the arguments.
class Printer
{
public void Print(string text)
{
Console.WriteLine(text);
}
public void Print(int number)
{
Console.WriteLine("Number: " + number);
}
public void Print(string text, int times)
{
for (int i = 0; i < times; i++)
Console.WriteLine(text);
}
}
Printer p = new Printer();
p.Print("Hello");
p.Print(42);
p.Print("Hi", 2);Output
Hello Number: 42 Hi Hi
Method Overloading — Exercise 1
Overloaded methods must differ in the number or types of their parameters — differing only in return type is not enough.
Fix the invalid overload (same signature)
Hint
Two methods with the same name must differ in parameter types or count, not just return type.
What distinguishes two overloaded methods with the same name?
Constructor Overloading
A class can have multiple constructors with different parameter lists. Use : this(...) to delegate from one constructor to another to avoid repeating code.
public class Time
{
public int Hour { get; set; }
public int Minute { get; set; }
public Time() : this(0, 0) { }
public Time(int h) : this(h, 0) { }
public Time(int h, int m)
{
Hour = h;
Minute = m;
}
public override string ToString() => $"{Hour:00}:{Minute:00}";
}
Console.WriteLine(new Time());
Console.WriteLine(new Time(9));
Console.WriteLine(new Time(14, 30));Output
00:00 09:00 14:30
Constructor Overloading — Exercise 1
When two constructors share logic, delegate to the most complete one using : this(...) to avoid duplication.
Eliminate duplicated initialisation logic
Hint
Use : this(1, 1, 1) on the parameterless constructor to call the three-parameter one.
What syntax calls another constructor from within a constructor?
Operator Overloading
You can redefine what operators like + or == do for your class using the operator keyword. The method must be public and static.
class Vector2D
{
public double X, Y;
public Vector2D(double x, double y) { X = x; Y = y; }
public static Vector2D operator +(Vector2D a, Vector2D b)
=> new Vector2D(a.X + b.X, a.Y + b.Y);
public override string ToString() => $"({X}, {Y})";
}
Vector2D v1 = new Vector2D(1, 2);
Vector2D v2 = new Vector2D(3, 4);
Console.WriteLine(v1 + v2);Output
(4, 6)
What modifiers are required on an overloaded operator method?
EX11 Review — this Keyword
this refers to the current object and is useful to resolve parameter shadowing.
Which keyword accesses members of the current object instance?
EXXXX Practice — Fix Constructor Shadowing
The statement age = age; does not update the field because the parameter shadows it.
Fix field assignment and validation
Hint
Use this.age to target the field, and reject negative values in the setter.
Bro Code Review — Auto Properties
Auto-properties reduce boilerplate when you do not need custom get/set logic.
Which declaration is an auto-implemented property?
Bro Code Review — Read-Only Property
A property with get and no public set is read-only from outside.
Which is read-only from outside the class?
Bro Code Review — Access Level Choice
Encapsulation favors minimal exposure; expose behavior, hide internals.
Which modifier keeps a field visible only inside its class?
Bro Code Review — Overload Selection
Overload resolution is compile-time and depends on argument types/count.
Method overloading requires methods to share the same:
Bro Code Review — Setter Validation
Set accessors are a common place to enforce business rules before storing new values.
Where should you reject invalid negative age values in an encapsulated Person class?