В этой главе завершается исследование ключевых аспектов С#, начиная с создания и манипулирования массивами данных. Затем вы узнаете, как конструировать перегруженные методы типов и определять параметры с применением ключевых слов out, ref и params. Также вы изучите типы перечислений, структуры и типы, допускающие null, плюс уясните отличие между типами значений и ссылочными типами. Наконец, вы освоите кортежи — средство, появившееся в C# 7 и обновленное в C# 8.
Часть III. Объектно-ориентированное программирование на C#
В этой части вы изучите основные конструкции языка С#, включая детали объектно-ориентированного программирования. Здесь вы научитесь обрабатывать исключения времени выполнения и взаимодействовать со строго типизированными интерфейсами. Вы также узнаете о времени существования объектов и сборке мусора.
Гпава 5. Инкапсуляция
В этой главе начинается рассмотрение концепций объектно-ориентированного программирования (ООП) на языке С#. После представления главных принципов ООП (инкапсуляции, наследования и полиморфизма) будет показано, как строить надежные типы классов с использованием конструкторов, свойств, статических членов, констант и полей только для чтения. Вы также узнаете об определениях частичных типов, синтаксисе инициализации объектов и автоматических свойств, а в заключение главы будут рассматриваться типы записей, появившиеся в C# 9.0.
Глава 6. Наследование и полиморфизм
Здесь вы ознакомитесь с оставшимися главными принципами ООП (наследованием и полиморфизмом), которые позволяют создавать семейства связанных типов классов. Вы узнаете о роли виртуальных и абстрактных методов (и абстрактных базовых классов), а также о природе полиморфных интерфейсов. Затем вы исследуете сопоставление с образцом посредством ключевого слова is ив заключение выясните роль первичного базового класса платформы .NET Core — System.Object.
Глава 7. Структурированная обработка исключений
В этой главе обсуждаются способы обработки в кодовой базе аномалий, возникающих во время выполнения, за счет использования структурированной обработки исключений. Вы узнаете не только о ключевых словах С#, которые дают возможность решать такие задачи (try, catch, throw, when и finally), но и о разнице между исключениями уровня приложения и уровня системы. Вдобавок в главе будет показано, как настроить инструмент Visual Studio на прерывание для всех исключений, чтобы отлаживать исключения, оставшиеся без внимания.
Глава 8. Работа с интерфейсами
Материал этой главы опирается на ваше понимание объектно-ориентированной разработки и посвящен программированию на основе интерфейсов. Здесь вы узнаете, каким образом определять классы и структуры, поддерживающие несколько линий поведения, обнаруживать такие линии поведения во время выполнения и выборочно скрывать какие-то из них с применением явной реализации интерфейсов. В дополнение к созданию специальных интерфейсов вы научитесь реализовывать стандартные интерфейсы, доступные внутри платформы .NET Core, и использовать их для построения объектов, которые могут сортироваться, копироваться, перечисляться и сравниваться.
Глава 9. Время существования объектов
В финальной главе этой части исследуется управление памятью средой .NET Runtime с использованием сборщика мусора .NET Core. Вы узнаете о роли корневых элементов приложения, поколений объектов и типа System.GC. После представления основ будут рассматриваться темы освобождаемых объектов (реализующих интерфейс IDisposable) и процесса финализации (с применением метода System.Object.Finalize()). В главе также описан класс Lazy<T>, позволяющий определять данные, которые не будут размещаться в памяти вплоть до поступления запроса со стороны вызывающего кода. Вы увидите, что такая возможность очень полезна, когда нежелательно загромождать кучу объектами, которые в действительности программе не нужны.
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})
Часть IV. Дополнительные конструкции программирования на C#
В этой части книги вы углубите знания языка C# за счет исследования нескольких более сложных (и важных) концепций. Здесь вы завершите ознакомление с системой типов .NET Core, изучив коллекции и обобщения. Вы также освоите несколько более сложных средств C# (такие как методы расширения, перегрузка операций, анонимные типы и манипулирование указателями). Затем вы узнаете о делегатах и лямбда-выражениях, взглянете на язык LINQ, а в конце части ознакомитесь с процессами и многопоточным/асинхронным программированием.
Глава 10. Коллекции и обобщения
В этой главе исследуется тема обобщений. Вы увидите, что программирование с обобщениями предлагает способ создания типов и членов типов, которые содержат заполнители, указываемые вызывающим кодом. По существу обобщения значительно улучшают производительность приложений и безопасность в отношении типов. Здесь не только описаны разнообразные обобщенные типы из пространства имен System.Collections.Generic, но также показано, каким образом строить собственные обобщенные методы и типы (с ограничениями и без).
Глава 11. Расширенные средства языка C#
В этой главе вы сможете углубить понимание языка C# за счет исследования нескольких расширенных приемов программирования. Здесь вы узнаете, как перегружать операции и создавать специальные процедуры преобразования (явного и неявного) для типов. Вы также научитесь строить и взаимодействовать с индексаторами типов и работать с расширяющими методами, анонимными типами, частичными методами и указателями С#, используя контекст небезопасного кода.
Глава 12. Делегаты, события и лямбда-выражения
Целью этой главы является прояснение типа делегата. Выражаясь просто, делегат .NET Core представляет собой объект, который указывает на определенные методы в приложении. С помощью делегатов можно создавать системы, которые позволяют многочисленным объектам участвовать в двухстороннем взаимодействии. После исследования способов применения делегатов .NET Core вы ознакомитесь с ключевым словом event языка С#, которое упрощает манипулирование низкоуровневыми делегатами в коде. В завершение вы узнаете о роли лямбда-операции C# (=>), а также о связи между делегатами, анонимными методами и лямбда-выражениями.
Глава 13. LINQ to Objects
В этой главе начинается исследование языка интегрированных запросов (LINQ). Язык LINQ дает возможность строить строго типизированные выражения запросов, которые могут применяться к многочисленным целевым объектам LINQ для манипулирования данными в самом широком смысле этого слова. Здесь вы изучите API-интерфейс LINQ to Objects, который позволяет применять выражения LINQ к контейнерам данных (например, массивам, коллекциям и специальным типам). Приведенная в главе информация будет полезна позже в книге при рассмотрении других API-интерфейсов.