Чтение онлайн

на главную - закладки

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

csc test.cs xyl.cs xy2.cs xy3.cs

И последнее замечание: в C# допускаются частичные обобщенные классы. Но параметры типа в объявлении каждого такого класса должны совпадать с теми, что указываются в остальных его частях.

Частичные методы

Как пояснялось в предыдущем разделе, с помощью модификатора partial можно создать класс частичного типа. Начиная с версии 3.0, в C# появилась возможность использовать этот модификатор и для создания частичного метода в элементе данных частичного типа. Частичный метод объявляется

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

Главная особенность частйчного метода заключается в том, что его реализация не требуется! Если частичный метод не реализуется в другой части класса или структуры, то все его вызовы молча игнорируются. Это дает возможность определить, но не востребовать дополнительные, хотя и не обязательные функции класса. Если эти функции не реализованы, то они просто игнорируются.

Ниже приведена расширенная версия предыдущей программы, в которой создается частичный метод Show . Этот метод вызывается другим методом, ShowXY (). Ради удобства все части класса XY представлены в одном файле, но они могут быть распределены по отдельным фацлам, как было показано в предыдущем разделе.

// Продемонстрировать применение частичного метода.

using System;

partial class XY {

public XY(int a, int b) {

X = a;

Y = b;

}

// Объявить частичный метод, partial void Show;

}

partial class XY {

public int X { get; set; }

// Реализовать частичный метод, partial void Show {

Console.WriteLine("{0}, {1}", X, Y);

}

}

partial class XY {

public int Y { get; set; }

// Вызвать частичный метод, public void ShowXY {

Show;

}

}

class Test {

static void Main {

XY xy = new XY(1, 2); xy.ShowXY ;

}

}

Обратите внимание на то, что метод Show объявляется в одной части класса XY, а реализуется в другой его части. В реализации этого метода выводятся значения координат X и Y. Это означает, что когда метод Show () вызывается из метода ShowXY , то данный вызов действительно имеет конкретные последствия: вывод значений

координат X и Y. Но если закомментировать реализацию метода Show , то его вызов из метода ShowXY ни к чему не приведет.

Частичным методам присущ ряд следующих ограничений. Они должны возвращать значение типа void. У них не может быть модификаторов доступа и они не могут быть виртуальными. В них нельзя также использовать параметры out.

Создание

объектов динамического типа

Как уже упоминалось не раз, начиная с главы 3, C# является строго типизированным языком программирования. Вообще говоря, это означает, что все операции проверяются во время компиляции на соответствие типов, и поэтому действия, не поддерживаемые конкретным типом, не подлежат компиляции. И хотя строгий контроль типов дает немало преимуществ программирующему, помогая создавать устойчивые и надежные программы, он может вызвать определенные осложнения в тех случаях, когда тип объекта остается неизвестным вплоть до времени выполнения. Нечто подобное может произойти при использовании рефлексии, доступе к COM-объекту или же в том случае, если требуется возможность взаимодействия с таким динамическим языком, как, например, IronPython. До появления версии C# 4.0 подобные ситуации были трудноразрешимы. Поэтому для выхода из столь затруднительного положения в версии C# 4.0 был внедрен новый тип данных под названием dynamic.

За одним важным исключением, тип dynamic очень похож на тип object, поскольку его можно использовать для ссылки на объект любого типа. А отличается он от типа object тем, что вся проверка объектов типа dynamic на соответствие типов откладывает до времени выполнения, тогда как объекты типа object подлежат этой проверке во время компиляции. Преимущество откладывания подобной проверки до времени выполнения состоит в том, что во время компиляции предполагается, что объект типа dynamic поддерживает любые операции, включая применение операторов, вызовы методов, доступ к полям и т.д. Это дает возможность скомпилировать код без ошибок. Конечно, если во время выполнения фактический тип, присваиваемый объекту, не поддерживает ту или иную операцию, то возникнет исключительная ситуация во время выполнения.

В приведенном ниже примере программы применение типа dynamic демонстрируется на практике.

// Продемонстрировать применение типа dynamic, using System;

using System.Globalization;

class DynDemo {

static void Main {

// Объявить две динамические переменные, dynamic str; dynamic val;

// Поддерживается неявное преобразование в динамические типы.

// Поэтому следующие присваивания вполне допустимы, str = "Это строка"; val = 10;

Console.WriteLine("Переменная str содержит: " + str);

Console.WriteLine("Переменная val содержит: " + val + '\n');

str = str.ToUpper (Culturelnfo.CurrentCulture);

Console.WriteLine("Переменная str теперь содержит: " + str);

val = val + 2;

Console.WriteLine("Переменная val теперь содержит: " + val + '\n');

string str2 = str.ToLower(Culturelnfo.CurrentCulture);

Console.WriteLine("Переменная str2 содержит: " + str2);

// Поддерживаются неявные преобразования из динамических типов.

int х = val * 2;

Console.WriteLine("Переменная x содержит: " + x);

}

}

Выполнение этой программы дает следующий результат.

Переменная str содержит: Это строка Переменная val содержит: 10

Поделиться:
Популярные книги

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Девочка для Генерала. Книга первая

Кистяева Марина
1. Любовь сильных мира сего
Любовные романы:
остросюжетные любовные романы
эро литература
4.67
рейтинг книги
Девочка для Генерала. Книга первая

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4

Мерзавец

Шагаева Наталья
3. Братья Майоровы
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
5.00
рейтинг книги
Мерзавец

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

Не грози Дубровскому! Том II

Панарин Антон
2. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том II

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

(Не)свободные, или Фиктивная жена драконьего военачальника

Найт Алекс
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
(Не)свободные, или Фиктивная жена драконьего военачальника

Наследник павшего дома. Том I

Вайс Александр
1. Расколотый мир
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том I

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Враг из прошлого тысячелетия