Comments
Instead of directly modifying the object after creation use the builder which creates the object and also manages its memebers and methods.
CODE
public class Car { public Car() { } public int Wheels { get; set; } public string Colour { get; set; } } //The builder abstraction public interface ICarBuilder { // Adding NotNull attribute to prevent null input argument void SetColour([NotNull]string colour); // Adding NotNull attribute to prevent null input argument void SetWheels([NotNull]int count); Car GetResult(); } //Concrete builder implementation public class CarBuilder : ICarBuilder { private Car _car; public CarBuilder() { this._car = new Car(); } public void SetColour(string colour) { this._car.Colour = colour; } public void SetWheels(int count) { this._car.Wheels = count; } public Car GetResult() { return this._car; } } //The director public class CarBuildDirector { public Car Construct() { CarBuilder builder = new CarBuilder(); builder.SetColour("Red"); builder.SetWheels(4); return builder.GetResult(); } }