Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Название:ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2007
- Город:Москва • Санкт-Петербург • Киев
- ISBN:ISBN 5-8459-1124-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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-сайта издательства.
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
for(int j = 0; j ‹ 6; j++) Console.Write(myMatrix[i, j] + "\t");
Console.WriteLine();
}
…
}
На рис. 3.22 показан соответствующий вывод (обратите внимание на прямоугольный вид массива).
Рис. 3.22. Многомерный массив
Второй тип многомерных массивов – это невыровненный массив. Как следует из самого названия, такой массив содержит некоторый набор массивов, каждый из которых может иметь свой верхний предел для индексов. Например:
static void Main(string[] args) {
…
// Невыровненный массив MD (т.е. массив массивов).
// Здесь мы имеем массив из 5 разных массивов.
int[][] myJagArray = new int[5][];
// Создание невыровненного массива.
for (int i = 0; i ‹ myJagArray.Length; i++) myJagArray[i] = new int[i +7];
// Печать каждой строки (не забывайте о том, что
// по умолчанию все элементы будут равны нулю!)
for (int i = 0; i ‹ 5; i++) {
Console.Write("Длина строки {0} равна {1}:\t", i, myJagArray[i].Length);
for (int j = 0; j ‹ myJagArray[i].Length; j++) Console.Write(myJagArray[i][j] + " ");
Console.WriteLine();
}
}
На рис. 3.23 показан соответствующий вывод (обратите, что здесь массив имеет "неровный край").
Рис. 3.23. Невыровненный массив
Теперь когда вы знаете, как строить и заполнять массивы в C#, обратим внимание на базовый класс любого массива: System.Array.
Базовый класс System.Array
Каждый создаваемый вами массив в .NET автоматически получается из System.Array. Этот класс определяет рад полезных методов для упрощения работы с массивами. В табл. 3.14 предлагаются описания некоторых из наиболее интересных членов указанного класса.
Таблица 3.14. Некоторые члены System.Array
| Член | Описание |
|---|---|
| BinarySearch() | Статический метод, выполняющий поиск заданного элемента в (предварительно отсортированном) массиве. Если массив скомпонован из пользовательских типов, искомый тип должен реализовывать интерфейс IComparer (см. главу 7), чтобы задействовать двоичный поиск |
| Clear() | Статический метод, очищающий заданный диапазон элементов в массиве (устанавливается 0 для числовых типов и null – для ссылочных типов) |
| CopyTo() | Метод, используемый для копирования элементов из массива-источника в целевой массив |
| Length | Свойство, доступное только для чтения и используемое для выяснения числа элементов в массиве |
| Rank | Свойство, возвращающее значение размерности данного массива |
| Reverse() | Статический метод, инвертирующий порядок следования элементов одномерного массива |
| Sort() | Метод, сортирующий одномерный массив внутренних типов. Если элементы в массиве реализуют интерфейс IComparer, можно также сортировать пользовательские типы (снова см. главу 7) |
Рассмотрим примеры использовании некоторых из этих членов. В следующем программном коде используются статические методы Reverse() и Clear() (а также свойство Length) для вывода некоторой информации о массиве строк firstNames на консоль.
// Создание строковых массивов и проверка
// некоторых членов System.Array.
static void Main(string[] args) {
// Массив строк.
string[] firstNames = {"Steve", "Dominic", "Swallow", "Baldy"};
// Печать имен в объявленном виде.
Console.WriteLine("Вот вам массив:");
for(int i = 0; i ‹ firstNames.Length; i++) Console.Write("Имя: {0}\t", firstNames[i]);
Console.WriteLine("\n");
// Инвертирование порядка в массиве и печать.
Array . Reverse(firstNames);
Console.WriteLine("Вот вам инвертированный массив:");
for (int i = 0; i ‹ firstNames.Length; i++) Console.Write("Имя: (0}\t", firstNames[i]);
Console.WriteLine("\n");
// Очистка всех данных, хроме Baldy.
Console.WriteLine("Очистка всех данных, кроме Baldy…");
Array.Clear(firstNames, 1, 3);
for (int i = 0; i ‹ firstNames.Length; i++) Console.Write ("Имя: {0}\t", firstNames[i]);
Console.ReadLine();
}
Обратите особое внимание на то, что при вызове метода Clear() для массива оставшиеся элементы массива не сжимаются в меньший массив. Для подвергшихся очистке элементов просто устанавливаются значения по умолчанию. Если вам нужен контейнер динамического типа, поищите подходящий тип в пространстве имен System.Collections.
Исходный код.Проект Arrays размещен в подкаталоге, соответствующем главе 3.
Типы с разрешением принимать значение null
Вы уже видели, что типы данных CLR имеют фиксированный диапазон изменения. Например, тип данных System.Boolean может принимать значения из множества {true, false}. В .NET 2.0 можно создавать типы с разрешением принимать значение null (типы nullable). Тип с разрешением принимать значение null может представлять любое значение, допустимое для данного типа, и, кроме того, значение null. Так, если объявить тип System.Boolean с разрешением принимать значение null, то такой тип сможет принимать значения из множества {true, false, null}. Очень важно понимать, что тип, характеризуемый значением, без разрешения принимать значение null это значение принимать не может.
static void Main(string[] args) {
// Ошибка компиляции!
// Типы, характеризуемые значением, не допускают значений null!
bool myBool = null;
int myInt = null;
}
Чтобы определить переменную типа nullable, к обозначению типа данных в виде суффикса добавляется знак вопроса (?). Такой синтаксис оказывается допустимым только тогда, когда речь идет о типах, характеризуемых значениями, или массивах таких типов. При попытке создать ссылочный тип (включая строковый) с разрешением значения null вы получите ошибку компиляции. Подобно переменным без разрешения принимать значение null, локальным переменным с таким разрешением тоже должны присваиваться начальные значения.
static void Main(string [] args) {
// Несколько определений локальных типов
// с разрешенными значениями null.
int? nullableInt = 10;
double? nullableDouble = 3.14;
bool? nullableBool = null;
char? nullableChar = 'a';
int?[] arrayOfNullableInts = new int?[10];
// Ошибка! Строки являются ссылочными типами!
string? s = "ой!";
}
Суффикс ? в C# является сокращенной записью для указания создать переменную структуры обобщённого типа System.Nullable‹T›. Мы рассмотрим обобщений в главе 10, а сейчас важно понять то, что тип System.Nullablе‹Т› предлагает ряд членов, которые могут использовать все типы с разрешением значения null. Например, используя свойство HasValue или операцию !=, вы можете программным путем выяснить, содержит ли соответствующая переменная значение null. Значение, присвоенное типу с разрешением значения null, можно получить непосредственно или с помощью свойства Value.
Читать дальшеИнтервал:
Закладка: