Когда мы используем объекты мы обычно приходим к объектному графу. Со временем у нас появляется несколько объектов которые взаимодействуют друг с другом. Когда один объект содержит другой мы говорим про связь Has-a. Предназначение этой связи может быть разное, один объект может просто ссылаться а может и делегировать ряд задач какому-то другому объекту.
Давайте представим что у нас есть система задач. Пользователь может создавать списки задачи, а внутри списков размещать сами задачи. К каждой задаче можно прикрепить текст задачи и пользователя который ей занят.
Мы можем очень эффектно выразить это с помощью следующих классов:
- User
 - List
 - Task
 
Вот как они выглядят
Фрагмент 1.43
class User
{
    public string Name;
    public User(string name)
    {
        Name = name;
    }
}
class List
{
    public Task[] Tasks;
    public List(Task[] tasks)
    {
        Tasks = tasks;
    }
}
class Task
{
    public User Worker;
    public string Description;
    public Task(User worker, string description)
    {
        Worker = worker;
        Description = description;
    }
}
Это не один возможный способ организации подобного примера. Текущая композиция например позволяет задаче быть на нескольких досках сразу. Мы можем это исправить убрав ссылку на задачу из листа и сделав ссылку на лист в задаче.
С организацией и дизайном кода можно играться очень долго исходя из задачи.