Перетворення до типу object

Розглянемо окремий випадок привласнення x = e; коли x має тип object. В цьому випадку гарантується повна узгодженість по привласненню — вираз e може мати будь-який тип. В результаті привласнення значенням змінної x стає посилання на об'єкт, заданий виразом e. Відмітьте, поточним типом x стає тип об'єкту, заданого виразом e. Вже тут виявляється одна з важливих відмінностей між класом і типом. Змінна, краще сказати — суть x, згідно оголошенню належить класу Object, але її тип — тип того об'єкту, з яким вона зв'язана у нинішній момент, — може динамічно змінюватися.

Масиви, перерахування, колекції

Масиви

Масиви в C# з погляду синтаксису практично нічим не відрізняються від масивів в мові C++ і Java. Проте внутрішній устрій масивів C# сильно відрізняється від згаданих мов. Річ у тому, що будь-який масив в C# є нащадком класу System.Array зі всіма витікаючими наслідками, пов'язаними із спадкоємством кожним масивом властивостей і методів класу Array. Детальніше клас Array розглядається нижчим.

Формально масив можна визначити як набір однотипних елементів, доступ до яких проводиться за допомогою числового індексу. Елементами масиву можуть бути значення довільного типу, зокрема масиви, класи, структури і інтерфейси. Масиви можуть бути як одновимірними, так і багатовимірними. Оголошення масиву відбувається шляхом приміщення квадратних дужок після вказівки типу даних для елементу масиву.

Розглянемо приклад: створення масиву d, типу int, що складається з десяти елементів. При цьому необхідно враховувати той факт, що нумерація елементів починається з нуля. Т. е. в даному випадку масив складатиметься з десяти елементів з номерами {0.9}:

int[] d;d = new int[10];

Аналогічне попередньому дія, що вимагає всього одного рядка коди:

int[] d = new int[10];

Ще один приклад створення масиву, що складається з дванадцяти елементів типу string:

string[] st = new string[12];

При створенні масивів необхідно враховувати, що для створення масиву фіксованої довжини, як в попередніх прикладах, необхідно завжди використовувати ключове слово new. Таким чином, наступне визначення масиву неприпустимо і приведе до виникнення помилки ще на етапі компіляції:

int[3] a={3,5,6};

Не дивлячись на це, якщо ми явно не указуємо розмір масиву при його створенні, а покладаємо ці обов'язки на компілятор, ключове слово new можна не використовувати. У зв'язку з цим наступне визначення масиву допустиме:

int[] a={3,5,6};

Заповнення масивів можливо здійснювати аналогічно C++, з використанням фігурних дужок, як вже було показано вище, або звертаючись до елементів масиву по номерах елементів:

int[] a=new int[3]{3,5,6}; int[] а = new int[3]; а[0]= 3; а[1]= 5; а[2]= 6;

Важливою відмінністю масивів C# від C++ є те, що при створенні масиву в C# його елементам автоматично привласнюються значення за умовчанням, на відміну від C++, де значення елементів тільки що створеного масиву виявляються не визначені. Привласнювані значення за умовчанням залежать від типу елементу. Так, для об'єктів значенням за умовчанням є NULL, а для цілих чисел - 0.

Крім простих одновимірних масивів C# підтримує також багатовимірні масиви, які у свою чергу діляться на дві категорії. До першої категорії відносяться масиви, кількість елементів кожного рядка яких складається з однакової кількості елементів. Таким чином, масив можна розглядати як прямокутник, а самі такі масиви називають "прямокутними". До другої категорії відносяться масиви, кількість елементів в рядках у яких не однаково. Такі масиви утворюють прямокутник, у якого одна сторона представляє ламану лінію, тому такі масиви називають "ламаними".

Розглянемо прості маніпуляції для роботи з прямокутними багатовимірними масивами.

Оголошення і заповнення масиву проводиться стандартним способом: для цього організовується два цикли:

Random rnd=new Random();int[,] Matrix;Matrix = new int[5, 4];for (int i = 0; i < 5; i++) for (int j=0;j<4;j++) Matrix[i,j]= rnd.Next(10,99);

При необхідності виведення значень елементів масиву на екран також організовується цикл, що дозволяє послідовно перебирати всі елементи масиву:

for (int i = 0; i < 5; i++){ for (int j = 0; j < 4; j++) { Response.Write(Matrix[i, j].ToString()); Response.Write(" "); } Response.Write("<br/>");}

Результат роботи програми показаний на рис. 3.1.

Мал. 3.1. Результат роботи програми з "прямокутним" масивом

"Ламаний" масив може розглядатися як масив, кожен осередок якого є масивом. Як приклад створимо масив із змінною кількістю елементів в рядках:

Random rnd = new Random();int[][] JMatrix = new int[5][];for (int i = 0; i < JMatrix.Length; i++){ JMatrix[i]= new int[rnd.Next(1,7)];}

Кількість елементів в рядку визначається випадковим чином у момент формування масиву. Кількість рядків задана жорстко і рівна п'яти. Масив не заповнюється ніякими числами, тому на екран виводитимуться значення, якими заповнюється масив за умовчанням (в даному випадку це нуль).

Для виведення інформації на екран необхідно використовувати два цикли, як це показано нижче.

for (int i = 0; i < JMatrix.Length; i++){ Response.Write("Кількість елементів в рядку " + i.ToString() + "=" + JMatrix[i].Length.ToString()+" "); for (int j = 0; j < JMatrix[i].Length; j++) { Response.Write(JMatrix[i][j].ToString() + " "); } Response.Write("<br/>");}

У циклі по j відбувається визначення кількості елементів в рядку за допомогою властивості Length.

Результат роботи програми представлений на рис. 3.2.

Мал. 3.2. Результат виводу на екран вмісту "ламаного" масиву


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: