Как уже упоминалось, вы можете создать список типа базового класса (AutoPart
) и добавить в него все остальные типы. У вас будут только свойства базового класса, доступные для заказа, но поскольку он содержит свойства Cost
и Name
, вы сможете делать то, что хотите.
Затем вы можете использовать метод расширения OrderByDescending
(добавьте using System.Linq
в начало вашего файла), чтобы упорядочить по Cost
от наивысшего к низшему:
private static void Main(string[] cmdArgs)
{
AutoPart motorCraftOilFilter = new AutoPart();
motorCraftOilFilter.Name = "MotorCraft Oil Filter";
motorCraftOilFilter.Cost = 6.99;
Liquid valvolineOil = new Liquid();
valvolineOil.Name = "Valvoline Oil";
valvolineOil.Cost = 8.99;
valvolineOil.Quarts = 1;
Tool wrench = new Tool();
wrench.Name = "Duralast 13mm Wrench";
wrench.Cost = 16.99;
wrench.SizeInMM = 13;
var catalog = new List<AutoPart>
{
motorCraftOilFilter,
valvolineOil,
wrench
};
// Pretent the command to order products was entered
// You can use OrderByDescending to order the items by
// Cost from Highest to Lowest
catalog = catalog.OrderByDescending(part => part.Cost).ToList();
// Output results
catalog.ForEach(item => Console.WriteLine(item.Name + " " + item.Cost));
Console.Write("\nPress any key to exit...");
Console.ReadKey();
}
Следует обратить внимание на то, как вы спроектировали свои классы, - вам не нужно создавать new
поля, которые уже определены в базовом классе. Это одна из причин использования наследования в том, что вы наследуете эти поля автоматически.
Кроме того, по практическому правилу вы почти всегда должны использовать свойства вместо полей для своих открытых членов. Вы можете прочитать о том, почему здесь .
Таким образом, ваши классы намного проще - добавьте только уникальные свойства к дочерним классам:
public class AutoPart
{
public string Name { get; set; }
public double Cost { get; set; }
}
public class Liquid : AutoPart
{
public double Quarts { get; set; }
}
public class Tool : AutoPart
{
public double SizeInMM { get; set; }
}