Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Выполнение вычислений может привести к сценарию, где вычисленный результат выходит за границы диапазона типа данных переменной результата. В Java, если целые значения достигают своих пределов, то они имеют неприятную особенность переходить к противоположной границе. Чтобы проиллюстрировать это, рассмотрим код следующего класса:
// OverflowEX.java
public class OverfTowEX {
publiс static void main(String args []) {
byte x = 0;
for (int i = 0; i < 130; i++) {
x++;
System.out.println(x);
}
}
}
Как известно, byte
в Java является 8-битовым типом данных со знаком. Это означает, что диапазон значений byte
лежит от -128 до 128. Результатом добавления единицы к любой границе заданного диапазона целого типа будет другая граница диапазона целого типа. Поэтому в этом примере добавление 1 к 127 создаст -128. И если откомпилировать и выполнить эту программу, то последние пять чисел выведенные на консоли будут следующими:
126
127
-128
-127
-126
Это может оказаться весьма существенной проблемой, особенно в связи с тем, что ни предупреждение ни исключение не порождаются, чтобы позволить обработать такое событие (возможно, сохраняя значение в типе с большим диапазоном значений). По умолчанию C# также обрабатывает ситуации переполнения, но язык и компилятор предоставляют инструменты для явной обработки и уведомления программиста в случае переполнения.
□ Программный подход. Чтобы бороться с этим типом молчаливых ошибок, C# вводит концепцию проверяемых и непроверяемых инструкций. Ключевое слово checked
используется для управления контекстом проверки переполнения в случае операций и преобразований арифметики целого типа, таких, как представленные выше. Оно может использоваться как оператор или как инструкция. Инструкции checked/unchecked
следуют приведенному ниже синтаксису ( i
). Они предназначены для помещения в скобки ряда инструкций, которые могут создавать переполнение. Синтаксис операции checked/unchecked
показан в пункте ( ii
). Операция checked проверяет переполнение одиночных выражений:
(i) checked {block_of_code}
unchecked { block_of_code}
(ii) checked (expression)
unchecked (expression)
block_of_code
содержит код, в котором инструкция checked/unchecked
наблюдает за переполнением, a expression
представляет выражение, в котором checked/unchecked
наблюдает за переполнением в конечном значении. Показанный далее пример иллюстрирует использование checked/unchecked
:
// OverflowEX.cs
public class OverflowEX {
public static void Main(String() args) {
sbyte x = 0; // помните, что необходимо изменить byte на sbyte
for (int i = 0; i < 130; i++) {
checked {
// можно также использовать checked(x++)
x++;
Console.WriteLine(x);
}
}
}
}
□ Подход с ключом компилятора. Для контроля переполнения во всем приложении может использоваться настройка компилятора /checked+
. Чтобы проиллюстрировать это, удалим инструкцию checked
из приведенного выше примера и попытаемся компилировать его, используя флаг /checked+
. С его помощью можно включать и выключать проверку арифметического переполнения, изменяя состояние конфигурационных свойств на странице свойств проекта. Задание значения как true будет включать проверку переполнения.
При включенной проверке переполнения можно обсудить использование инструкции unchecked
. По сути она предоставляет функциональность для произвольного исключения проверки выражений или блоков инструкций в то время, когда включена проверка во всем приложении. В примере ниже предыдущая инструкция заменяется инструкцией unchecked
. Компиляция и выполнение этого кода будет создавать вывод, аналогичный выводу OverflowEX.java
.
// OverflowEX.сs.
public class OverflowEX {
public static void Main(String[] args) {
sbyte X = 0;
for (int i = 0; i < 130; i++) {
unchecked { // можно также использовать unchecked(x++)
x++;
Console.WriteLine(x);
}
}
}
}
Входные и выходные данные
Возможность собрать входные данные из командной строки и вывести данные в командной строке является интегральной частью функциональности ввода/вывода в Java. Обычно в Java необходимо создать экземпляр объекта java.io.BufferedReader
, используя поле System.in
, чтобы извлечь ввод из командной строки. Ниже представлен простой класс Java — JavaEcho
, который получает ввод с консоли и выводит его обратно, чтобы проиллюстрировать использование пакета Java.io
для сбора и форматирования ввода и вывода:
// JavaEcho.java
import java.io.*;
public class JavaEcho {
public static void main(String[] args) throws IOException {
BufferedReader stdin = new BufferedReader(new InputSreamReader(System.in));
String userInput = stdin.readLine();
System.out.println("You said: " + userInput);
}
}
Класс System.Console
предоставляет методы в C#, которые дают аналогичную функциональность для чтения и записи из и в командную строку, Нет необходимости в каких-либо дополнительных объектах, класс Console
предоставляет методы, которые могут читать целые строки, читать символ за символом и даже показывать описанный выше поток, из которого выполняется чтение. Важно отметить, что эту функциональность дает System.Console
без создания экземпляра объекта Console
. Фактически можно обнаружить, что невозможно создать экземпляр объекта Console
. Члены класса Console
кратко описаны в таблицах ниже:
Открытые статические свойства (общие) | Описание |
---|---|
Error |
Получает стандартный выходной поток ошибок системы |
In |
Получает стандартный входной поток ошибок системы |
Out |
Получает стандартный поток вывода системы |
Открытые статические методы (общие) | Описание |
---|---|
OpenStandardError |
Перезагруженный. Возвращает стандартный поток ошибок. |
OpenStandardInput |
Перезагруженный. Возвращает стандартный поток ввода. |
OpenStandardOutput |
Перезагруженный. Возвращает стандартный поток вывода. |
Read |
Читает следующий символ из стандартного потока ввода. |
ReadLine |
Читает следующую строку символов из Console.In , который по умолчанию задается как стандартный поток ввода системы. |
SetError |
Перенаправляет свойство Error для использования указанного потока TextWriter . |
SetIn |
Перенаправляет свойство In для использования указанного потока TextReader . |
SetOut |
Перенаправляет свойство Out для использования указанного потока TextWriter . |
Write |
Перезагруженный. Записывает указанную информацию в Console.Out . |
WriteLine |
Перезагруженный. Записывает информацию, за которой следует конец строки в Console.Out . |
Как можно видеть, все члены Console
являются статическими. static
является примером модификатора C#. Он обладает тем же значением, что и его аналог в Java, т.е. делает указанную переменную или метод принадлежащим всему классу, а не одному какому-то экземпляру класса. Мы обсудим модификаторы более подробно позже в этом приложении.
Интервал:
Закладка: