Int[] myArray1;
int[] massiv1 = new int[12];
Здесь между разделителями [ и ] находится константное выражение, значение которого определяет размерность массива. Значение по умолчанию числовых элементов массива задано равным нулю, а элементы ссылок имеют значение null, но значения можно инициализировать при создании массива следующим образом:
int[] myArray2 = new int[] {7, 13, 4, 2};
int[] myArray3 = {5, 9, 3, 17, 9};
Можно создавать массивы из строк:
string[] days = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"};
Индексация массивов начинается с нуля, поэтому номер первого элемента массива равен 0. Обращение к элементу массива осуществляется через квадратные скобки [ и ].
myArray2[2]=17;
Пример: Написать программу, осуществляющую ввод целых чисел в массив. Из полученного массива распечатать элементы превышающие среднее арифметическое всего массива.
//описываем необходимые переменные
Int I,n; string s;double av;
//вводим число элементов
Console.Write("Введите число элементов массива N=");
s = Console.ReadLine();
N = Convert.ToInt32(s);
//создаём массив необходимой длины
int[] massiv1 = new int[N]; av = 0;
//запускаем цикл по всем элементам массива
for (i = 0; i < N; i++)
{
//вводим i-ый элемент
Console.Write("Введите {0}-й элемент массива ",i);
s = Console.ReadLine();
massiv1[i] = Convert.ToInt32(s);
//суммируем все элементы массива
av += massiv1[i];
}
//находим среднее арифметическое
av /=N;
//запускаем цикл по всем элементам массива
for (i = 0; i < N; i++)
//печатаем только элементы больше среднего
if (massiv1[i] > av) Console.Write("{0} ", massiv1[i]);
Console.ReadKey();
Массивы можно целиком переприсваивать:
int[] massiv1 = new int[50];
. . .//обрабока элементов массива
//обьявляем массив massiv2 без инициализации
Int[] massiv2;
massiv2 = massiv1;//переприсваиваем
Массивы могут иметь несколько измерений. Например, матрица - это двухмерный массив. В примере показано объявление двухмерного и трёхмерного массивов:
int[,] my_matrix1 = new int[4, 2];
int[, ,] my_cube1 = new int[4, 2, 3];
int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
int[, ,] array3D = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } };
int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
Если нужно создать переменную массива без инициализации, то необходимо использовать оператор new, чтобы присвоить массив переменной. Например:
Int[,] array5;
array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK
//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Будет ошибка!
В следующем примере кода переменные массивов инициализируются значениями по умолчанию:
int[,] array6 = new int[10, 10];
Доступ к каждому элементу массива можно осуществить через квадратные скобки. Индексация многомерных массивов начинается с нуля:
array5[2, 1] = 25;
Пример: ввод и распечатку содержимого матрицы:
//описываем необходимые переменные
Int I,j, m,n; string s;
//вводим число элементов
Console.Write("Введите число строк матрицы N=");
s = Console.ReadLine();
N = Convert.ToInt32(s);
Console.Write("Введите число столбцов матрицы M=");
s = Console.ReadLine();
M = Convert.ToInt32(s);
//создаём двухмерный массив необходимой длины
int[,] my_matrix= new int[N,M];
//запускаем циклы по всем элементам матрицы
for (i = 0; i < N; i++) //цикл по строкам
for (j = 0; j < M;j++ ) //цикл по столбцам
{
//вводим i,j-ый элемент
Console.Write("Введите элемент матрицы ({0},{1}) ", i+1,j+1);
s = Console.ReadLine();
my_matrix[i,j] = Convert.ToInt32(s);
}
Console.WriteLine();
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
Console.Write("{0,3} ", my_matrix[i, j]);
Сonsole.WriteLine();
Массив массивов — это массив, элементы которого сами являются массивами. Элементы массива массивов могут иметь различные размеры и измерения. Массивы массивов иногда также называются "невыровненными массивами". В следующих примерах показано, как выполняется объявление, инициализация и доступ к массивам массивов. Ниже показано объявление одномерного массива, включающего три элемента, каждый из которых является одномерным массивом целых чисел.
int[][] jaggedArray = new int[3][];
Перед использованием jaggedArray его элементы нужно инициализировать. Сделать это можно следующим образом.
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];
Каждый элемент представляет собой одномерный массив целых чисел. Первый элемент массива состоит из пяти целых чисел, второй — из четырех и третий — из двух. Для заполнения элементов массива значениями можно также использовать инициализаторы, при этом размер массива знать не требуется. Например:
jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
jaggedArray[1] = new int[] { 0, 2, 4, 6 };
jaggedArray[2] = new int[] { 11, 22 };
Также массив можно инициализировать путем объявления.
int[][] jaggedArray2 = new int[][]
{
new int[] {1,3,5,7,9},
new int[] {0,2,4,6},
new int[] {11,22}
}
Пример:
class ArrayTest
{
static void Main()
{
// Declare the array of two elements:
int[][] arr = new int[2][];
// Initialize the elements:
arr[0] = new int[5] { 1, 3, 5, 7, 9 };
arr[1] = new int[4] { 2, 4, 6, 8 };
// Display the array elements:
for (int i = 0; i < arr.Length; i++)
{
System.Console.Write("Element({0}): ", i);
for (int j = 0; j < arr[i].Length; j++)
{
System.Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " ");
}
System.Console.WriteLine();
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
Element(0): 1 3 5 7 9
Element(1): 2 4 6 8
*/
В
языке C# массивы являются объектами, а
не просто смежными адресуемыми областями
памяти, как в C и C++. Array является
абстрактным базовым типом для всех
типов массивов. Можно использовать
свойства и другие члены класса, которые
имеет Array.
В примере используется свойство Length для
получения длины массива. В следующем
коде длина массива numbers
,
равная 5
,
присваивается переменной lengthOfNumbers
:
int[] numbers = { 1, 2, 3, 4, 5 };
int lengthOfNumbers = numbers.Length;
Класс System.Array позволяет использовать много других полезных методов и свойств для выполнения сортировки, поиска и копирования массивов. В этом примере свойство Rank используется для отображения числа измерений массива.
class TestArraysClass
{
static void Main()
{
// Declare and initialize an array:
int[,] theArray = new int[5, 10];
System.Console.WriteLine("The array has {0} dimensions.", theArray.Rank);
}
}
// Output: The array has 2 dimensions.
Строковый тип данных string.
Тип данных string — это последовательность, содержащая ни одного или любое число знаков Юникода. В платформе.NET Framework string является псевдонимом для String. Несмотря на то, что тип string является ссылочным типом, операторы равенства (== и !=) определены для сравнения значений объектов типа string, а не ссылок. Это упрощает проверку равенства строк. Пример.
string a = "hello";
string b = "h";
// Append to contents of 'b'
b += "ello";
Console.WriteLine(a == b);
Console.WriteLine((object)a == (object)b);
В
этом примере отображается "True", а
затем "False", поскольку содержимое
строк одинаково, но a
и b
не
ссылаются на один и тот же экземпляр
строки. Оператор + служит для объединения
строк.
string a = "good " + "morning";
В данном примере создается строковый объект, содержащий текст "good morning". Строки являются неизменяемыми: содержимое строкового объекта невозможно изменить после создания объекта, хотя из-за синтаксиса изменения кажутся возможными. Например, при написании этого кода компилятор на самом деле создает новый строковый объект для новой последовательности знаков, а переменная b по-прежнему содержит "h".
string b = "h";
b += "ello";
Оператор [] служит для доступа только для чтения к отдельным знакам объекта string.
string str = "test";
char x = str[2]; // x = 's';
Строковые литералы имеют тип string и могут быть написаны в двух формах: в кавычках и в кавычках с @. Строковые литералы в кавычках заключены в двойные кавычки (").
"good morning" // a string literal
Методы: назначение, определения, вызов.
Метод представляет собой блок кода, содержащий набор инструкций. Программа инициирует выполнение операторов, вызывая метод и задавая необходимые аргументы метода. В C# все инструкции выполняются в контексте метода. Метод Main является точкой входа для каждого приложения C#, и вызывается он средой CLR при запуске программы.
Методы объявляются в классе или в структуре путем указания уровня доступа, например public или private, необязательных модификаторов, например abstract илиsealed, возвращаемого значения, имени метода и списка параметров этого метода. Все вместе эти элементы образуют подпись метода.
Параметры заключаются в круглые скобки и разделяются запятыми. Пустые скобки указывают на то, что у метода нет параметров. Следующий класс содержит три метода.
abstract class Motorcycle
{
// Anyone can call this.
public void StartEngine() {/* Method statements here */ }
// Only derived classes can call this.
protected void AddGas(int gallons) { /* Method statements here */ }
// Derived classes can override the base class implementation.
public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; }
// Derived classes must implement this.
public abstract double GetTopSpeed();
}
Вызов
метода объекта очень похож на обращение
к полю. После имени объекта ставится
точка, затем имя метода и скобки. В
скобках перечисляются аргументы,
разделенные запятыми. Таким образом,
методы класса Motorcycle
можно
вызывать так, как показано в следующем
примере.
class TestMotorcycle : Motorcycle
{
public override double GetTopSpeed()
{
return 108.4;
}
static void Main()
{
TestMotorcycle moto = new TestMotorcycle();
moto.StartEngine();
moto.AddGas(15);
moto.Drive(5, 20);
double speed = moto.GetTopSpeed();
Console.WriteLine("My top speed is {0}", speed);
}
}
Определение метода задает имена и типы любых необходимых параметров. Когда код вызова вызывает метод, он предоставляет конкретные значения, называемые аргументами, для каждого параметра. Аргументы должны быть совместимыми с типом параметра, но имя параметра (если таковое имеется), используемое в коде вызова, не должно быть таким же, как параметр с именем, определенным в методе. Пример:
public void Caller()
{
int numA = 4;
// Call with an int variable.
int productA = Square(numA);
int numB = 32;
// Call with another int variable.
int productB = Square(numB);
// Call with an integer literal.
int productC = Square(12);
// Call with an expression that evaulates to int.
productC = Square(productA * 3);
}