в вашем случае, использование interface
было бы более уместным.
вы можете определить свой контракт в своих интерфейсах, а также унаследовать несколько интерфейсов для каждого класса.
Интерфейс будет реализовывать методы, свойства в классе, а затем вы сможете настроить их логи c по мере необходимости. Когда вы инициализируете объект с помощью этого интерфейса, вы сможете использовать предоставляемые свойства или методы.
пример:
public enum VehicleMake
{
Acura,
Audi,
BMW,
Chevrolet,
Dodge,
Fait,
Ford,
Hyundai,
Honda,
Nissan,
Toyota
}
public enum FuelType
{
Gas,
Diesel
}
public interface IVehicle
{
FuelType Fuel { get; }
VehicleMake Make { get; set; }
string Model { get; set; }
int MakeYear { get; set; }
IRental Rental { get; set; }
}
public interface IRental
{
bool IsRented { get; set; }
}
public class Rental : IRental
{
public bool IsRented { get; set; }
}
public class Car : IVehicle
{
public FuelType Fuel => FuelType.Gas;
public VehicleMake Make { get; set; }
public string Model { get; set; }
public int MakeYear { get; set; }
public IRental Rental { get; set; }
}
public class Truck : IVehicle
{
public FuelType Fuel => FuelType.Diesel;
public VehicleMake Make { get; set; }
public string Model { get; set; }
public int MakeYear { get; set; }
public IRental Rental { get; set; }
}
Это даст нам следующее:
var vehicles = new List<IVehicle>
{
new Car
{
Make = VehicleMake.BMW,
MakeYear = 2020,
Rental = new Rental { IsRented = true }
},
new Car
{
Make = VehicleMake.Toyota,
MakeYear = 2000,
Rental = new Rental { IsRented = false }
},
new Truck
{
Make = VehicleMake.Nissan,
MakeYear = 2015,
Rental = new Rental { IsRented = false }
}
};
foreach (var vehicle in vehicles)
{
Console.Write($"{vehicle.GetType().Name}\t");
Console.Write($"{vehicle.Make.ToString()}\t");
Console.Write($"{vehicle.MakeYear.ToString()}\t");
Console.Write($"{vehicle.Fuel.ToString()}\t");
if (vehicle.Rental?.IsRented == true)
{
Console.Write("rented");
}
else
{
Console.Write("not rented");
}
Console.WriteLine();
}
Итак, любой новый тип транспортного средства (например, Автомобиль, Грузовик, ..et * 1018) *) он должен реализовать IVehicle
. Интерфейс IRental
Я поместил только одно свойство, так как я не знаю, что вы хотите реализовать внутри реального класса, также как и другие классы. но поскольку вы реализуете конкретный класс, вы сможете определить основные свойства и метод, которые должны быть в интерфейсе.