Сообщения с тегом ‘int’
Framework .Net и универсальность
Написано admin в 20 Июнь 2008 – 21:50 -Framework .Net и универсальность
Универсальность принадлежит к основным механизмам языка. Ее введение в язык C# не могло не сказаться на всех его основных свойствах. Как уже говорилось, классы и все частные случаи стали обладать этим свойством. Введение универсальности не должно было ухудшить уже достигнутые свойства языка – статический контроль типов, динамическое связывание и полиморфизм. Не должна была пострадать и эффективность выполнения программ, использующих универсальные классы.
Решение этих задач потребовало введения универсальности не только в язык C#, но и поддержки на уровне каркаса Framework .Net и языка IL, включающем теперь параметризованные типы. Универсальный класс C# не является шаблоном, на основе которого строится конкретизированный класс, компилируемый далее в класс (тип) IL. Компилятору языка C# нет необходимости создавать классы для каждой конкретизации типов универсального класса. Вместо этого происходит компиляция универсального класса C# в параметризованный тип IL. Когда же CLR занимается исполнением управляемого кода, то вся необходимая информация о конкретных типах извлекается из метаданных, сопровождающих объекты. Read more »
Tags: Array, ArrayList, Comparer, Generic, IDictionary, int, LinkedList, queue, SortedDictionary, SortedList, Stack, static
Находится в Учебник | No Comments »
Две проблемы с обработчиками событий
Написано admin в 20 Июнь 2008 – 21:45 -Две проблемы с обработчиками событий
Объекты, создающие события, ничего не знают об объектах, обрабатывающих эти события. Объекты, обрабатывающие события, ничего не знают друг о друге, независимо выполняя свою работу. В такой модели могут возникать определенные проблемы. Рассмотрим некоторые из них.
Игнорирование коллег
Задумывались ли вы, какую роль играет ключевое слово event, появляющееся при объявлении события? Событие, объявленное в классе, представляет экземпляр делегата. В предыдущей лекции, когда речь шла о делегатах, их экземпляры объявлялись без всяких дополнительных ключевых слов.
Слово “event” играет важную роль, позволяя решить проблему, названную нами “игнорированием коллег”. В чем ее суть? В том, что некоторые из классов Receiver могут вести себя некорректно по отношению к своим коллегам, занимающимся обработкой того же события. При присоединении обработчика события в классе Receiver можно попытаться вместо присоединения обработчика выполнить операцию присваивания, игнорируя, тем самым, уже присоединенный список обработчиков. Взгляните еще раз на процедуру OnConnect класса Receiver2; там демонстрируется такая попытка в закомментированном операторе. Аналогично, в процедуре OffConnect вместо отсоединения (операции -) можно попытаться присвоить событию значение null, отсоединяя тем самым всех других обработчиков. Read more »
Tags: ChangedEventArgs, event, int, item, ListWithChangedEvent, null, OffConnect, OnChanged, OnConnect, permit, receiver, void
Находится в Учебник | No Comments »
Пример “Списки с событиями”
Написано admin в 20 Июнь 2008 – 21:44 -Пример “Списки с событиями”
В этом примере строится класс ListWithChangedEvent, являющийся потомком встроенного класса ArrayList, который позволяет работать со списками. В класс добавляется событие Changed, сигнализирующее обо всех изменениях элементов списка. Строятся два класса – Receiver1 и Receiver2, получающие сообщения. В примере рассматривается взаимодействие нескольких объектов: два объекта посылают сообщения, три – принимают.
Начнем с объявления делегата: Read more »
Tags: base, ChangedEventArgs, Class, Clear, Console, event, index, int, ListWithChangedEvent, OnChanged, Override, permit, return, sender
Находится в Учебник | No Comments »
Функции высших порядков
Написано admin в 20 Июнь 2008 – 21:39 -Функции высших порядков
Одно из наиболее важных применений делегатов связано с функциями высших порядков. Функцией высшего порядка называется такая функция (метод) класса, у которой один или несколько аргументов принадлежат к функциональному типу. Без этих функций в программировании обойтись довольно трудно. Классическим примером является функция вычисления интеграла, у которой один из аргументов задает подынтегральную функцию. Другим примером может служить функция, сортирующая объекты. Аргументом ее является функция Compare, сравнивающая два объекта. В зависимости от того, какая функция сравнения будет передана на вход функции сортировки, объекты будут сортироваться по-разному, например, по имени, или по ключу, или по нескольким полям. Вариантов может быть много, и они определяются классом, описывающим сортируемые объекты. Read more »
Tags: callback, delegate, EvalIntegral, Functions, HighOrderIntegral, int, period, state, Timer, Unix, Win
Находится в Учебник | No Comments »
Структуры
Написано admin в 20 Июнь 2008 – 21:30 -Структуры
Рассмотрим теперь более подробно вопросы описания структур, их синтаксиса, семантики и тех особенностей, что отличают их от классов.
Синтаксис структур
Синтаксис объявления структуры аналогичен синтаксису объявления класса:
[атрибуты][модификаторы]struct имя_структуры[:список_интерфейсов]
{тело_структуры}
Какие изменения произошли в синтаксисе в сравнении с синтаксисом класса, описанным в лекции 16? Их немного. Перечислим их:
- ключевое слово class изменено на слово struct;
- список родителей, который для классов, наряду с именами интерфейсов, мог включать имя родительского класса, заменен списком интерфейсов. Для структур не может быть задан родитель (класс или структура). Заметьте, структура может наследовать интерфейсы;
- для структур неприменимы модификаторы abstract и sealed. Причиной является отсутствие механизма наследования.
Все, что может быть вложено в тело класса, может быть вложено и в тело структуры: поля, методы, конструкторы и прочее, включая классы и интерфейсы. Read more »
Tags: Abs, Class, int, Math, nod, Object, PrintRational, struct, TwoSemantics, void
Находится в Учебник | No Comments »
