» » » Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание


Авторские права

Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Здесь можно скачать бесплатно "Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование, издательство Издательский дом "Вильямс", год 2007. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Рейтинг:
Название:
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Издательство:
Издательский дом "Вильямс"
Год:
2007
ISBN:
ISBN 5-8459-1124-9
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание"

Описание и краткое содержание "ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание" читать бесплатно онлайн.



В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.






class TimePrinter {

 static void PrintTime(object state) {

  Console.WriteLine("Время: {0}", DateTime.Now.ToLongTimeString());

 }

}

Этот метод имеет один параметр типа System.Object и возвращает void. Такая структура метода обязательна, поскольку делегат TimerCallback может вызывать только такие методы. Значение, передаваемое целевому методу делегата TimerCallback, может представлять любую информацию (так, в случае электронной почты это может быть имя сервера Microsoft Exchange, с которым требуется взаимодействие в ходе процесса). А так как параметр является типом System.Object, в действительности можно передать любое число аргументов, если использовать System.Array или пользовательский класс (структуру).

Следующим шагом является настройка экземпляра делегата TimerCallback и передача его объекту Timer. Кроме делегата TimerCallback, конструктор Timer позволяет указать дополнительную информацию (в виде System.Object) для передачи ее целевому объекту делегата, временной интервал опроса метода и время ожидания (в миллисекундах) до начала первого вызова, например:

static void Main(string[] args) {

 Console.WriteLine("***** Работа с типом Timer *****\n");

 // Создание делегата для типа Timer.

 TimerCallback timeCB = new TimerCallback(PrintTime);

 // Установка параметров таймера.

 Timer t = new Timer(

  timeCB, // Тип делегата TimerCallback.

  null, // Информация для вызываемого метода или null.

  0, // Время ожидания до старта.

  1000); // Интервал между вызовами (в миллисекундах) .

 Console.WriteLine("Нажмите «Enter» для завершения работы…");

 Console.ReadLine();

}

В данном случае метод PrintTime() будет вызываться примерно каждую секунду и методу не передается никакой дополнительной информации. Чтобы передать целевому объекту делегата какую-то информацию, замените значение null второго параметра конструктора подходящим значением (например, "Привет"). Следующая модификация метода PrintTime() использует переданное значение.

static void PrintTime(Object state) {

 Console.WriteLine("Время: {0}, Параметр: {1}", DateTime.Now.ToLongTimeString(), state.ToString());

}

На рис. 14.11 показан соответствующий вывод.

Рис. 14.11. Таймеры за работой

Исходный код. Проект TimerApp размещен в подкаталоге, соответствующем главе 14.

Пул потоков CLR

Заключительной темой нашего обсуждения в этой плаве, посвященной потокам, будет пул потоков CLR. При асинхронном вызове типов с помощью делегатов (посредством метода BeginInvoke()) нельзя сказать, что среда CLR буквально создает совершенно новый поток. В целях эффективности метод BeginInvoke() делегата использует пул (динамическую область) рабочих потоков, поддерживаемых средой выполнения. Чтобы позволить вам взаимодействовать с этим пулом рабочих потоков, пространство имен System.Threading предлагает тип класса ThreadPool.

Чтобы поставить вызов метода в очередь для обработки рабочим потоком из пула, используйте метод ThreadPool.QueueUserWorkItem(). Этот метод является перегруженным, чтобы вдобавок к экземпляру делегата WaitCallback имелась возможность указать необязательный System.Objеct для пользовательских данных состояния.

public sealed class ThreadPool {

 …

 public static bool QueueUserWorkItem(WaitCallback callBack);

 public static bool QueueUserWorkItem(WaitCallback callBack, object state);

}

Делегат WaitCallback может указывать на любой метод, имеющий один параметр System.Object (для представления необязательных данных состояния) и не возвращающий ничего. Если при вызове QueueUserWorkItem() вы не предложите System.Object, среда CLR автоматически передаст значение null. Для иллюстрации методов очереди при использовании пула потоков CLR давайте рассмотрим следующую программу, в которой снова используется тип Printer. Но на этот раз мы не будем создавать массив типов Thread вручную, а свяжем метод PrintNumbers() с членами пула.

class Program {

 static void Main(string[] args) {

  Console.WriteLine("Старт главного потока. ThreadID = {0}", Thread.CurrentThread.GetHashCode());

  Printer p = new Printer();

  WaitCallback workItem = new WaitCallback(PrintTheNumbers);

  // Очередь из 10 вызовов метода.

  for (int i = 0; i ‹ 10; i++) {

   ThreadPool.QueueUserWorkItem(workItem, p);

  }

  Console.WriteLine("Все задачи в очереди");

  Console.ReadLine();

 }

 static void PrintTheNumbers(object state) {

  Printer task = (Printer)state;

  task.PrintNumbers();

 }

}

Здесь вы можете спросить, разве выгодно использовать поддерживаемый средой CLR пул потоков вместо явного создания объектов Thread? Тогда рассмотрите следующие главные преимущества использования пула.

• Пул потоков управляет потоками эффективнее, поскольку минимизируется число потоков, которые приходится создавать, запускать и останавливать.

• При использовании пула потоков вы можете сосредоточиться на своей конкретной задаче, не отвлекаясь на вопросы инфраструктуры потоков приложения.

Однако управление потоками "вручную" может оказаться предпочтительнее, например, в следующих случаях.

• Если требуется создавать приоритетные потоки или устанавливать приоритеты потоков. Потоки, помещенные в пул, всегда являются фоновыми потоками с обычным уровнем приоритета (ThreadPriority.Normal).

• Если требуется создать поток с фиксированным идентификатором, чтобы име-лаcь возможность завершить, приостановить или обнаружить его по имени.

Исходный код. Проект ThreadPoolApp размещён в подкаталоге, соответствующем главе 14.

На этом наш экскурс в многопоточное программирование .NET завершается. Пространство имен System.Threading, без сомнения, определяет множество других типов, кроме тех, которые смогли уместиться в рамках обсуждения данной главы. Но сейчас вы имеете прочный фундамент, который позволит вам расширять свой знания.

Резюме

Эта глава началась с рассмотрения того, как настроить тип делегата .NET на вызов методов в асинхронной форме. Как было показано, методы BeginInvoke() и EndInvoke() позволяют косвенно управлять фоновыми потоками с минимальными усилиями и практически без проблем. В ходе обсуждения были рассмотрены интерфейс IAsyncResult и тип класса AsyncResult. Эти типы обеспечивают различные способы синхронизации вызовов и получения возвращаемых значений методов.

Оставшаяся часть главы была посвящена выяснению роли пространства имен System.Threading. Вы узнали о том, что в результате создания приложением дополнительных потоков программа получает (мнимую) возможность выполнять множество задании одновременно. Были рассмотрены различные способы защиты блоков программного кода, уязвимых в отношении потоков, чтобы при совместном использовании ресурсов потоками не происходило повреждения данных. Наконец, вы узнали о том, что среда CLR поддерживает пул потоков с целью повышения общей производительности системы и удобства ее использования.

ГЛАВА 15. CIL и роль динамических компоновочных блоков

В этой главе ставится две задачи. В первой половине главы будет рассмотрен синтаксис и семантика языка CIL (Common Intermediate Language – общий промежуточный язык) намного более подробно, чем в предыдущих главах. Честно говоря, при создании программ .NET вполне можно обойтись и без непосредственного изучения подробностей внутреннего устройства CIL-кода. Однако, изучив основы CIL, вы получите более глубокое понимание того, как функционируют некоторые "магические" особенности .NET (например, межъязыковое наследование). В оставшейся части главы будет исследована роль пространства имен System. Reflection.Emit. Используя его типы, вы получаете возможность строить программное обеспечение, способное генерировать компоновочные блоки .NET в памяти во время выполнения. Формально компоновочные блоки, определенные и выполняемые в памяти, называют динамическими компоновочными блоками. Как вы можете догадаться, эта специальная возможность .NET требует знания языка CIL, поскольку от вас потребуется указать набор CIL-инструкций, которые будут использоваться при создании компоновочного блока.

Природа программирования в терминах CIL

CIL – это родной язык платформы .NET, Когда вы создаете компоновочный блок .NET, используя тот управляемый язык, который вы предпочитаете, соответствующий компилятор переводит ваш исходный код в термины CIL. Подобно любому языку программирования, язык CIL предлагает множество программных и структурных лексем. Поскольку CIL является одним из языков программирования .NET не должно быть удивительным то, что вполне возможно создавать компоновочные блоки .NET непосредственно с помощью CIL и CIL-компилятора (ilasm.exe), вхо-дящего в стандартную поставку .NET Framework 2.0 SDK.

Хотя вполне очевидно, что лишь немногие программисты предпочтут строить свои .NET-приложения непосредственно на языке CIL, язык CIL сам по себе является чрезвычайно интересным объектом для интеллектуального исследования. Проще говоря, чем лучше вы понимаете грамматику CIL, тем увереннее вы будете себя чувствовать в мире нетривиальных приемов разработки .NET. Если говорить конкретно, то разработчик, обладающий пониманием языка CIL, получает следующее.


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание"

Книги похожие на "ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Эндрю Троелсен

Эндрю Троелсен - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание"

Отзывы читателей о книге "ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.