Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 368 369 370 371 372 373 374 375 376 ... 642

В качестве примера предположим, что создано множество классов, которые моделируют автомобили. Существует базовый класс по имени Car, который "имеет" класс Radio. Другой класс по имени JamesBondCar расширяет базовый тип Car.

На рис. 20.1 показан возможный граф объектов, моделирующий такие отношения. При чтении графов объектов для описания соединяющих стрелок можно использовать выражение "зависит от" или "ссылается на". Таким образом, на рис. 20.1 видно, что класс Car ссылается на класс Radio (учитывая отношение "имеет" ), JamesBondCar ссылается на Car (из-за отношения "является" ), а также на Radio (поскольку наследует эту защищенную переменную-член).

Разумеется, исполняющая среда не рисует картинки в памяти для представления графа связанных объектов. Взамен отношение, показанное на рис. 20.1, представляется математической формулой, которая выглядит следующим образом:

[Car 3, ref 2], [Radio 2], [JamesBondCar 1, ref 3, ref 2]

Проанализировав формулу, вы заметите, что объект 3 (Car) имеет зависимость от объекта 2 (Radio). Объект 2 (Radio) — "одинокий волк", которому никто не нужен. Наконец, объект 1 (JamesBondCar) имеет зависимость от объекта 3, а также от объекта 2. В любом случае при сериализации или десериализации экземпляра JamesBondCar граф объектов гарантирует, что типы Radio и Car тоже примут участие в процессе.

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

Создание примеров типов и написание операторов верхнего уровня

Создайте новый проект консольного приложения .NET 5 по имени SimpleSerialize. Добавьте в проект новый файл класса под названием Radio.cs со следующим кодом:

using System;

using System.Linq;

using System.Collections.Generic;

using System.Text.Json.Serialization;

using System.Xml;

using System.Xml.Serialization;

namespace SimpleSerialize

{

  public class Radio

  {

    public bool HasTweeters;

    public bool HasSubWoofers;

    public List<double> StationPresets;

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

    public string RadioId = "XF-552RR6";

    public override string ToString()

    {

      var presets = string.Join(",",

                StationPresets.Select(i => i.ToString()).ToList());

       return $"HasTweeters:{HasTweeters}

                HasSubWoofers:{HasSubWoofers} Station Presets:{presets}";

    }

  }

}

Добавьте еще один файл класса по имени Car.cs и приведите его содержимое к такому виду:

using System;

using System.Text.Json.Serialization;

using System.Xml;

using System.Xml.Serialization;

namespace SimpleSerialize

{

  public class Car

  {

    public Radio TheRadio = new Radio();

    public bool IsHatchBack;

    public override string ToString()

      => $"IsHatchback:{IsHatchBack} Radio:{TheRadio.ToString()}";

  }

}

Затем добавьте очередной файл класса по имени JamesBondCar.cs и поместите в него следующий код:

using System;

using System.Text.Json.Serialization;

using System.Xml;

using System.Xml.Serialization;

namespace SimpleSerialize

{

  public class JamesBondCar : Car

  {

    public bool CanFly;

    public bool CanSubmerge;

    public override string ToString()

      => $"CanFly:{CanFly}, CanSubmerge:{CanSubmerge} {base.ToString()}";

  }

}

Ниже показан код финального файла класса Person.cs:

using System;

using System.Text.Json.Serialization;

using System.Xml;

using System.Xml.Serialization;

namespace SimpleSerialize

1 ... 368 369 370 371 372 373 374 375 376 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий