protected override void ThrowIfComponentIsNotValidForThisVehicleType(Component i_Component)
        {
            eComponentType typeToAdd = i_Component.Type;

            if (typeToAdd != eComponentType.WeightComponent && typeToAdd != eComponentType.HazardousComponent)
            {
                throw new ArgumentException("You can only add weight and hazardous components to a truck.");
            }
        }
        protected override void ThrowIfComponentIsNotValidForThisVehicleType(Component i_Component)
        {
            eComponentType typeToAdd = i_Component.Type;

            if (typeToAdd != eComponentType.ColorComponent && typeToAdd != eComponentType.DoorsComponent)
            {
                throw new ArgumentException("You can only add color or doors to a car");
            }
        }
        protected override void ThrowIfComponentIsNotValidForThisVehicleType(Component i_Component)
        {
            eComponentType typeToAdd = i_Component.Type;

            if (typeToAdd != eComponentType.LicenceComponent && typeToAdd != eComponentType.CapacityComponent)
            {
                throw new ArgumentException("You can only add licence and engine capacity components to a motorcycle.");
            }
        }
        private void throwIfComponentAlreadyExists(Component i_Component)
        {
            eComponentType typeToAdd = i_Component.Type;

            foreach (Component component in m_Components)
            {
                if (component.Type.Equals(typeToAdd))
                {
                    throw new ArgumentException("This component type already exists in this vehicle.");
                }
            }
        }
 protected abstract void ThrowIfComponentIsNotValidForThisVehicleType(Component i_Component);
 public void AddComponent(Component i_Component)
 {
     if (i_Component != null)
     {
         throwIfComponentAlreadyExists(i_Component);
         ThrowIfComponentIsNotValidForThisVehicleType(i_Component);
         m_Components.Add(i_Component);
     }
 }