Write a C# program that simulates a simple vehicle dealership inventory management application. The program should include the following:
Methods and Parameters
Implement a method to add a new vehicle 'AddVehicle' to the dealership's inventory. Use method overloading to allow adding a car with different sets of parameters (e.g., with or without optional features).
Implement a recursive method to search for a car by its VIN (Vehicle Identification Number).
Classes
Create a ‘Vehicle’ class with properties such as 'Make', 'Model', 'Year', 'VIN', and 'Price'. Implement a de-constructor to clean up any resources if necessary.
Create a 'Dealership' class that uses static members to keep track of the total number of vehicles. Implement an extension method to display car details.
Exception Handling
Implement exception handling in the 'AddVehicle' method to handle cases such as duplicate VINs or invalid data.
Demonstrate catching multiple exception types, such as 'ArgumentNullException' and 'FormatException', when adding a new car.
Implement a general catch block to handle any other exceptions and rethrow the caught exception for logging purposes.