Объектно-ориентированный C#

Композиция (composition) вместо наследования в C#

В этом уроке вы соберёте заказ из небольших взаимодействующих объектов вместо наследования.

Введение

Композиция (composition) - это сборка объекта из более мелких объектов, у каждого из которых понятная задача. По сравнению с наследованием такой подход сохраняет классы лёгкими и простыми для изменения и избавляет от сложных и жёстких иерархий наследования.

Заказ Order содержит список строк LineItem, а не наследует от них. Свойство Total поручает расчёт каждой строке через Items.Sum(item => item.Price). У каждого объекта одна обязанность, а итог за книгу и ручку 35.

Пример на C#, который можно запустить

C#
Запустить код →
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;

record LineItem(string Name, decimal Price);
class Order
{
    public List<LineItem> Items { get; } = new();
    public decimal Total => Items.Sum(item => item.Price);
}

class Program
{
    static void Main()
    {
        var order = new Order();
        order.Items.Add(new("Book", 30m));
        order.Items.Add(new("Pen", 5m));
        Console.WriteLine(order.Total);
    }
}
Результат выполнения
35

Практика с отладчиком

Поставьте точку останова на важное присваивание или условие, нажмите Debug и посмотрите локальные значения, прежде чем перейти к следующей строке.