
- •Объявление и определение класса.
- •Конструкторы и деструкторы ( типы конструкторов и деструкторов)
- •Дружественные функции.
- •Пеpегpузка опеpаций ( синтаксис operator)
- •Статические компоненты класса.
- •Пространства имен.
- •Иерархия классов ( последовательность работы конструкторов и деструкторов )
- •Доступ к наследуемым компонентам
- •Виртуальные функции (когда применяются, форма вызова)
- •Шаблоны ( пример template)
- •Ввод-вывод в файл. Сохранение объектов в файле.
- •Обработка исключений (блоки try, throw, catch)
- •Использование классов при организации исключений. Иерархия исключений
- •Паттерны и их классификация
- •Абстрактная фабрика.
- •Наблюдатель.
- •Классификация типов данных.
- •Массивы и строки. Оператор foreach
- •Классы, создание объектов.
- •Методы класса и их параметры.
- •Свойства класса.
- •Наследование и виртуальные функции. Механизмы наследования
- •Классы – интерфейсы.
- •Производные классы
- •Методы - члены класса
- •Виртуальные методы
- •Делегаты.
- •Создаем собственный делегат
Классификация типов данных.
В языке программирования C# типы данных подразделяются на три категории:
Значение
Ссылка
Указатель
К первой категории относятся участки памяти, распределенные под переменные и предназначенные для хранения значений этих переменных. Например, следующий код
int x = 5;
объявляет переменную - целую со знаком, размером 32 бита, с именем x и начальным значением, равным 5. Ниже приведена соответствующая этому объявлению диаграмма:
Обратите внимание на то, как число 5 размещено на диаграмме.
Переменные-ссылки содержат адреса объектов, размещенных в динамической памяти. Следующий код объявляет переменную с именем y, типа object и инициализирует ее с помощью оператора new. Таким образом она получает адрес экземпляра object, размещенного в динамической памяти (object -- это базовый класс для всех типов в C#, но об этом чуть ниже).
object y = new object();
И наконец -- переменные-указатели. Они похожи на указатели в языках программирования C и C++. Очень важно понимать, что и переменные-ссылки и переменные-указатели, фактически, представляют собой адрес в памяти, но на этом их сходство заканчивается. Переменные-ссылки отслеживаются сборщиком "мусора", указатели -- нет. Переменные-указатели допускают выполнение арифметических операций над ними, ссылки -- нет. Бесконтрольное использование указателей в программе в принципе небезопасно, поэтому в языке C# допускается работать с только внутуказателямири unsafe (небезопасных) блоков (небезопасный код должен помечаться зарезервированным словом unsafe, например:
static unsafe void FastCopy ( byte[] src, byte[] dst, int count )
{
// здесь допустимо использовать указатели
}
int[] mas1 = new int[5];
int[] mas1 = {5, 3, 5, 7, 15};
int[,] mas1 = new int[3, 5];
int[][] mas1 = new int[5][];
for (int x = 0; x < 5; x++)
{
mas1[x] = new int[x+1];
}
for (int x = 0; x < 5; x++)
for (int y = 0; y < x+1; y++)
mas1[x][y] = x + y;
for (int x=0; x < 5; x++)
{
for (int y=0; y < x+1; y++)
{
Console.Write(mas1[x][y]+"\\t" );
}
Console.WriteLine();
}
Console.Read();
Хотелось бы напоследок еще раз обратить ваше внимание на то, что массив в C# - это объект, поэтому с ним можно выполнять те же действия, что и с другими объектами. У массивов есть множество полезных методов, которые нужно знать и уметь ими пользоваться. Перечислю лишь наиболее употребляемые: Sort() - сортировка одномерного массива. Пример:
int[] mas2 = { 3, 4, 1 };
Array.Sort(mas2);
Clear() - очищает массив. Всем элементам присваивается значение по умолчанию. Пример:
int[] mas2 = { 3, 4, 1 };
Array.Сlear(mas2);
СopyTo() - копирование массива. В примере ниже мы создаем 2 массива. Длина первого 3, второго - 4. Первый массив мы заполняем при создании. Второй массив заполняется значениями по умолчанию, т.е. нулями. После чего мы копируем первый массив во второй, начиная с индекса 1, т.е. со второй ячейки:
int[] oldmass = { 3, 4, 1 };
int[] newmass = new int[4];
oldmass.CopyTo(newmass, 1);
Length - свойство массива содержащего его длину. Пример:
int[] mas = { 3, 4, 1 };
Console.WriteLine(mas.Length);
У массивов есть и другие методы и свойства, с ними вы можете ознакомиться сами. Приведенных здесь методов вполне хватит, для работы с несложными структурами.