Агрегация в C#

Приветствую всех, сегодня я затрону тему об агрегации, что это такое и рассмотрим пример использования.

Применение, суть его в том что бы расширить функциональность имеющего класса, будь он вашим или чужим, знаетели вы он нем что то или нет. Агрегация позволит избежать избыточного кода и работать с методами и классами.

Агрегация и композиция очень близкие понятия, за исключением того что композиция имеет частный случай. В обоих случаях есть объект-контейнер и объект-содержимое этого контейнера. Объект-содержимое, как привило является полем объекта-контейнера. Но в тоже время, между композицией и агрегацией есть одно важное отличие: при использовании композиции, объект-содержимое не может существовать без своего контейнера, а случае агрегации, такое вполне возможно. Да еще и при использовании агрегации, объект-содержимое может принадлежать даже нескольким контейнерам (но тут нужно быть осторожным) или у одного объекта-контейнера, в течении «жизни», может быть разное содержимое (причем, агрегация позволяет использовать даже содержимое разных типов одном у тому же контейнеру).

Пример агрегирования:

//Класс, отправляющий данные 
class Sender
{
    public void Send(byte[] aData)
    { 
        //Отправка данных
    }
 
    //Поля класса, для хранения настроек и прочего
}
 
//Класс, отправляющий данные, сжимая их перед отправкой
class SenderM
{
    //Конструктор
    public SenderM(Sender aSender)
    {
        sender = aSender;
    }
 
    //Модифицированный метод отправки (предварительно сжимающий данные)
    public void SendM(byte[] aData)
    {
        //Сжимаем данные aData
 
        //Отправляем данные (вызывая метод базового класса)
        sender.Send(aData);
    }
 
    //Ссылка на объект класса Sender
    private Sender sender;
  
    //Какие-то другие поля класса...
}
//Создаем объект, который будет частью другого
Sender tmpSender = new Sender();
 
//Создаем объект-контейнер
SenderM mainSender = new SenderM(tmpSender); 
 
//Какие-то данные
byte[] someData = new byte[512];
 
//Какое-то заполнение данных...
 
//Отправка уже данных со сжатием
mainSender.SendM(someData);

 

 

Обновлено: 25.10.2018 — 12:27

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.