Я вижу данную расcылку, как аналог премодерируемой
конференции. Т.е. здесь мы,
люди изучающие и использующие платформу .NET, сможем
обменяться своими
находками и идеями.
Присылайте письма с вопросами и ответами на адрес mailto:level3@mail.ru,
они будут помещены в рассылку с указанием имени и
(по желанию) адреса автора,
если содержание соответствует тематике.
На письма с очень часто задаваемыми вопросами я
постараюсь ответить не помещая
их в рассылку, таким образом, надеюсь, что рассылка
будет интересной для Вас.
Массивы имеют тип System.Array и не копируются при
присваивании (т.е. это
ссылки а не значения). Массивы можно использовать в
циклах foreach. Свойство
Length содержит общее число элементов массива (по
всем измерениям).
Одномерные массивы (векторы в C++)
Тип массива включает в себя информацию о базовом типом
элементов, которые может
содержать массив, и о размерности (количестве индексов)
массива.
Одномерные массивы определяются так:
int[] arr = new int[100];
Здесь arr - имя массива, 100 - количество элементов в
массиве, первый элемент -
arr[0], последний arr[99].
Заполнить массив можно тремя способами:
int i = new int[2];
i[0] = 1;
i[1] = 2;
int[] i = new int[]
{1,2};
int[] i = {1,2};
Используя класс System.Array можно сделать массив с
произвольным значением
индекс первого элемента.
Прямоугольные массивы (Такой конструкции нет в Java)
Чтобы получить граничные индексы элементов в
некотором измерении, нкжно
воспользоваться функциями GetUpperBound(int i) и
GetLowerBound(int i), где i -
номер измерения (считая с нуля). GetLength(int i)
вернет количество элементов в
некотором измерении.
Массивы из массивов (Jagged Arrays)
Они подходят для текстовых редакторов.
// memory allocation and object zeroing
int[][] jag1 = new int[2][];
jag1[0] = new int [4];
jag1[1] = new int [6];
for (int i = 0; i < jag1.GetLength(0); i++)
{
for (int j = 0; j < jag1[h].GetLength(0); j++)
{
Console.WriteLine(jag1[i][j]);
}
}
// creating an initialized array
int[][] jag2 = new int[][]
{
new int[] {1, 2, 3, 4},
new int[] {5, 6, 7, 8, 9, 10}
};
for (int i = 0; i < jag2.Length; i++)
{
for (int j = 0; j < jag2[h].Length; j++)
{
Console.WriteLine(jag2[i][j]);
}
}
Indexer'ы
Индексеры (как бы их по-русски поудачнее назвать?)
могут пригодиться если
нужно:
сделать разряженный массив;
хранить массив не в памяти, а, к примеру, на диске;
вычислять значения массива на лету и хранить
только измененные значения
Синтаксис:
public double this[int i, int j]
{
set
{
MyCodeToStoreValue(i, j, value);
}
get
{
double res = MyMethodToRetrieveValue(i, j);
return res;
}
}
Здесь value - ключевое слово, которое обозначает
значение
Исключения могут быть выброшены двумя способами:
либо оператором throw (в этом
случае оно выбрасывается всегда). Либо при
возникновении особой ситуации
(например деления на ноль) - это случается не всегда
(и по-идее должно не
случаться)
Блок finally выполняется независимо от того - было
исключение или нет. (Это
альтернатива деструкторам)
Можно написать несколько блоков catch подряд, в этом
случае выбирается первый
подходящий по типу. Поэтому следует писать
обработчики специальных исключений
сначала, а базовых исключений в конце.
-----Original Message-----
From: Serg Vorontsov
Sent: Tuesday, September 18, 2001 9:30 PM
To: level3@mail.ru
Hi !
Про оператор switch я бы дополнил еще важную деталь:
ветвь цикла по стандарту
должна обязательно заканчиваться оператором
break или другим
оператором перехода. Это, кстати, важное отличие
Beta 2 от Beta 1.