ExpC_Module 15ru_1.ppt
- Количество слайдов: 22
Модуль 15 Анонимные методы, неполные типы и типы, допускающие неопределенное значение
Обзор модуля В этом модуле вы изучите n n n Анонимные методы Неполные (частичные) типы Типы, допускающие неопределенное значение (nullable-типы) Изучение C#/ Модуль 15/ 2 из 22
Занятие 1 - Анонимные методы На первом занятии, Анонимные методы, вы изучите: n n Описание анонимных методов и их назначение. Список особенностей и преимуществ анонимных методов. Создание и использование анонимных методов. Объяснение передачи параметров анонимным методам. Изучение C#/ Модуль 15/ 3 из 22
Анонимные методы n n n Это новая особенность в C# 2. 0, представляющая собой встроенный безымянный блок кода, который может быть передан как параметр делегату. В ранних версиях C# при необходимости передачи делегату небольшого блока кода, нужно было создать метод, а затем передать его делегату. С введением анонимных методов можно передать встроенный блок кода делегату без реального создания метода. Изучение C#/ Модуль 15/ 4 из 22
Особенности n Анонимный метод имеет следующие особенности: n Он выглядит как встроенный код в объявлении делегата. n Наилучшим образом подходит для маленьких блоков. n Может принимать параметры любого типа. n Ему могут передаваться параметры с использованием ключевых слов ref и out. n n Может включать параметры обобщенного типа. Не может включать выражения безусловных переходов, например, goto и break, передающих управление вовне области видимости метода. Изучение C#/ Модуль 15/ 5 из 22
Преимущества n n Анонимные методы подходят для небольших блоков кода, передаваемых как параметры делегату. Анонимный метод имеет следующие преимущества: n Это устраняет необходимость в имени метода, нужного всего для одного вызова в программе. n Это уменьшает число именованных и требующих поддержки методов. n Это помогает лучшему пониманию кода, когда вызывающий и вызываемый блоки кода существуют вместе в одном выражении. Изучение C#/ Модуль 15/ 6 из 22
Создание анонимных методов Пример n Синтаксис Следующие аспекты необходимо учесть при using System; создании анонимных методов: class Anonymous. Methods { § При использовании ключевого слова delegate // Эта строка остается той же, даже если внутриметоды используют за ним должно следовать тела метода, делегата void именованые Display(); тело анонимного метода. static void Main(string[] args) Вывод { § При создании объекта делагата, метод //Здесь возникает различие, когда определяется как набор выражений в This используются анонимные методы Display illustrates obj. Disp = delegate() фигурных скобках. anonymous { method Console. Write. Line(“This illustrates § Анонимные методы не возвращают значений. anonymous method”); }; § Анонимные методы не используют префиксы с obj. Disp(); модификаторами доступа. } } Изучение C#/ Модуль 15/ 7 из 22
Referencing Multiple Anonymous Methods n n C# позволяет создавать и получать экземпляр Вывод Пример делегата, ссылающийся на несколько анонимных using illustrates one anonymous method This System; class This illustrates another методов. Multiple. Anonymous. Methods anonymous method with the same { delegate instance delegate void Display(); Оператор += используется для добавления static void Main(string[] args) { дополнительныхделегата с одним анонимным методом, ссылающимсяили на //экземпляр ссылок или на именованные, на Display obj. Disp = delegate() анонимные методы после создания экземпляра { Console. Write. Line(“This illustrates one anonymous method”); делегата. }; //экземпляр делегата с другим анонимным методом obj. Disp += delegate() { Console. Write. Line(“This illustrates another anonymous method with the same delegate instance”); }; obj. Disp(); } } Изучение C#/ Модуль 15/ 8 из 22
Внешние переменные анонимных методов Пример n Анонимный метод может объявлять переменные, publicназываемые внешними. delegate void Print(); class Display { static string msg = “This illustrates using nouter variable in эти переменные захватываются, Говорят, что anonymous methods”; static void Main(string[] args) когда они выполняются. { Вывод Print obj. Print = delegate() { This n Они существуют в памяти, пока делегат не illustrates Console. Write. Line(msg); using outer }; подвергается сборке мусора. variable in obj. Print(); anonymous } methods } n Область видимости локальной переменной существует только в пределах метода, в котором она объявлена. Изучение C#/ Модуль 15/ 9 из 22
Передача параметров n C# Пример разрешает передачу параметров анонимным методам. class Parameters { delegate void Display(string msg, int num); n static параметров, которые могут быть переданы Тип void Main(string[] args) { анонимному методу, указывается в момент Display obj. Disp = delegate(string msg, объявления делегата. int num) Вывод { Console. Write. Line(msg + num); n Эти параметры указываются в скобках. This }; illustrates obj. Disp(“This illustrates passing parameters to anonymous methods. The parameters to anonymous n Блок кода в анонимном “, 100); получает доступ к int parameter passed is: методе methods. The } указанным параметрам как любой нормальный int } parameter метод. passed is: 100 Изучение C#/ Модуль 15/ 10 из 22
Занятие 2 - Неполные (частичные) типы На втором занятии, Неполные (частичные) типы, вы изучите: n Описание неполных типов и их назначение. n Реализацию неполных типов. n Описание неполных классов в C#. n Случаи использования неполных типов. Изучение C#/ Модуль 15/ 11 из 22
Неполные типы Назначение n n n Можно разделить элементы данных класса или структуры и хранить их в разных файлах. Эти элементы могут комбинироваться в единый блок при запуске программы. Это можно сделать с помощью неполных типов. Изучение C#/ Модуль 15/ 12 из 22
Неполные типы n n Неполные типы - новое дополнение к C# 2. 0, облегчающее определение классов, структур и интерфейсов на несколько файлов. Неполные типы обеспечивают следующие преимущества: Они разделяют код генератора от кода приложения. Они помогают в легкой разработке и поддержке кода. Они помогают легкому процессу отладки. Они страхуют программистов от случайной модификации существующего кода. Изучение C#/ Модуль 15/ 13 из 22
Реализация неполных типов n Неполные Вывод Пример Синтаксис типы реализуются с помощью ключевого слова partial. //Program of two numbers: 55 Addition Name: Subtraction(int val. One, int val. Two) public int Maths. Demo. cs [
Занятие 3 - Типы, допускающие неопределенное значение На последнем занятии, Типы, допускающие неопределенное значение, вы изучите: n Описание типов, допускающих неопределенное значение. n Синтаксис создания типов, допускающих неопределенное значение. n Характеристики таких типов. n Реализация таких типов. Изучение C#/ Модуль 15/ 15 из 22
Типы, допускающие неопределенное значение (nullable) n n C# 2. 0 представляет новую особенность - типы, допускающие неопределенное значение или nullable-типы, позволяющие определять и обрабатывать поля со значениями null. До введения этих типов, значения типа null поддерживались только ссылочными типами. Переменные значащих типов со значениями null указывались или специальным значением, или дополнительной переменной. Специальные значения выгодны только при целостном прохождении таких величин по всему приложению. Изучение C#/ Модуль 15/ 16 из 22
Создание типов, допускающих неопределенное значение n n Nullable-тип - средство присваивания nullзначений значащим типам. Такой тип указывает, что переменная может иметь значение null. Nullable-типы являются экземплярами структуры System. Nullable
Характеристики n Nullable-типы в C# имеют следующие характеристики: n n Они представляют тип значения, которому может быть присвоено значение null. Они позволяют присваивание значений так же, как для нормальных типов данных. Они возвращают присвоенные значения или значения по умолчанию для nullable-типов. Когда nullable-тип присваивается не nullable-типу, и используется присвоенное значение или значение по умолчанию, используется оператор ? ? . Изучение C#/ Модуль 15/ 18 из 22
Реализация типов, допускающих неопределенное значение Свойство Has. Value может включать любой диапазон n Has. Value - это логическое свойство, значений, валидных для типа данных, которому class Employee { определяющее валидность значения переменной. принадлежит args) static void Main(string[] nullable-тип. n{ Свойство Has. Value возвращает true, если int emp. Id = 10; string emp. Name = “Patrick”; значение =переменной not null, иначе null; n char? role Nullable-типы имеют два открытых свойства, Console. Write. Line(“Employee возвращается false. ID: “ + emp. Id); Вывод Console. Write. Line(“Employee Name: “+emp. Name); которые могут быть доступных только для чтения, if (role. Has. Value == n Свойство Value true) { реализованы для проверки валидности nullable. Employee ID: 10 Console. Write. Line(“Role: “ + role. Value); n Свойство и для получения их значение для nullable Value определяет значений. Employee Name: } типов Patrick else -переменной. Has. Value Role: null { n Свойство Console. Write. Line(“Role: null”); n Когда. Свойство Value значение Has. Value вычисляется как true, } n } свойство Value возвращает значение переменной, } иначе возвращается исключение. n Пример Nullable-тип n Изучение C#/ Модуль 15/ 19 из 22
Nullable-типы в выражениях Пример C# позволяет использовать nullable-типы в class Numbers выражениях, результатом которых может быть { static void Mainnull. значение (string[] args) n { n System. Nullable
Оператор “? ? ” Пример n Nullable-тип может иметь определенное или classнеопределенное значение. Salary { static void Main(string[] args) { n Можно определить значение по умолчанию для double? actual. Value = null; double market. Value = actual. Value ? ? nullable-типа, который может быть присвоен не 0. 0; Вывод nullable-типу = 100. 20; с помощью оператора ? ? . actual. Value Console. Write. Line(“Value: “ + Value: 100. 2 actual. Value); Market Value: 0 Console. Write. Line(“Market Value: “ + n Если nullable-тип содержит значение null, market. Value); }оператор ? ? возвращает значение по умолчанию. } Изучение C#/ Модуль 15/ 21 из 22
Резюме n n n Анонимные методы позволяют передавать блок неименованного кода как параметр делегату. Они устраняют необходимость создавать именованые методы для небольших блоков кода, используемых делегатами. Одиночный экземпляр делегата может адресовать несколько анонимных методов с помощью оператора +=. Неполные (частичные) типы n Неполные (частичные) типы позволяют разделять определения классов, структур и интерфейсов для хранения в нескольких C# файлах. Можно определить неполные типы с помощью ключевого слова partial. Типы, допускающие неопределенное значение (nullable) n Nullable-типы позволяют присваивать значения null значащим типам. Это позволяет работать со значениями null, которые могут требоваться в базе данных. Nullable-типы обеспечивают два открытых свойства, доступных только по чтению, Has. Value и Value. Изучение C#/ Модуль 15/ 22 из 22


