Public static void DisplayCounter()

{

Console.WriteLine("Создано {0} объектов State", counter);

}

}

Class Program

{

static void Main(string[] args)

{

State state1 = new State();

State state2 = new State();

State state3 = new State();

State state4 = new State();

State state5 = new State();

State.DisplayCounter(); // 5

Console.Read();

}

}

Структура

Кроме базовых элементарных типов данных и перечислений в C# имеется и составной тип данных, который называется структурой.

Структура — это объединение нескольких объектов, возможно, различного типа под одним именем, которое является типом структуры. В качестве объектов могут выступать переменные, массивы, указатели и другие структуры.

Структуры позволяют трактовать группу связанных между собой объектов не как множество отдельных элементов, а как единое целое. Структура представляет собой сложный тип данных, составленный из простых типов.

Общая форма объявления структуры:

МодификаторДоступа struct Имя_структуры

{

МодификаторДоступа тип ИмяЭлемента1;

МодификаторДоступа тип ИмяЭлемента2;

. . .

МодификаторДоступа тип ИмяЭлементаn;

};

Пример. Передача структуры через функцию.

using System;

namespace ConsoleApplication4

{

public struct MyStruct

{

public int a;

public string b;

}

class Program

{

static MyStruct FunctionS()

{

MyStruct S;

S.a = Convert.ToInt32(Console.ReadLine());

S.b = Console.ReadLine();

return (S);

}

static void Main(string[] args)

{

MyStruct S;

S = FunctionS();

}

}

}

Список значений

Хотя в языке C# есть массивы, которые хранят в себе наборы однотипных объектов, но работать с ними не всегда удобно. Например, массив хранит фиксированное количество объектов, однако что если мы заранее не знаем, сколько нам потребуется объектов. И в этом случае намного удобнее применять коллекции.

Необобщенные или простые коллекции определены в пространстве имен System.Collections.

Список значений – это набор данных различного типа, аналог одномерного массива, только хранить может элементы различных типов.

Для работы со списком значений предназначен класс ArrayList

Сначала всегда создают пустой список значений – объект класса ArrayList

ArrayList list = new ArrayList();

Для добавления элементов в список значений предназначен метод ADD

list.Add(2.3); // заносим в список объект типа double

list.Add(55); // заносим в список объект типа int

list.AddRange(new string[] { "Hello", "world" }); // заносим в список строковый массив

Обратиться к элементу списка можно по его номеру

А = list[0]

Удаляем первый элемент

list.RemoveAt(0);

Переворачиваем список

list.Reverse();

Так как класс ArrayList находится в пространстве имен System.Collections, то необходимо его подключить, если собираетесь использовать список.

Таблица значений

Это таблица, которая состоит из строк (Rows) и столбцов (Columns). К любой строке или колонке можно обратиться по индексу и получить нужные значения. Все данные строки хранятся в свойстве ItemArray, который представляет массив объектов - значений отдельных ячеек строки.

При работе с таблицей значений необходимо сначала создать объект класса DataTable, затем описать структуру таблицы, т.е. из каких столбцов она будет состоять:

DataTable table = new DataTable(); //создаем объект таблица//создаем столбцыtable.Columns.Add("Dosage", typeof(int));table.Columns.Add("Drug", typeof(string));table.Columns.Add("Patient", typeof(string));table.Columns.Add("Date", typeof(DateTime));//добавляем строкиtable.Rows.Add(25, "Indocin", "David", DateTime.Now);table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);

Пространство имен System.Data

Все столбцы таблицы типа DataColumnCollection.

Все строки таблицы типа DataRow.

Цикл Для каждого

Для перебора коллекций, таких объектов как массив, список значений, таблица значений удобно использовать цикл Для каждого

Для каждого ЭлементКоллекции Из Коллекции Цикл

{

Тело цикла

}

foreach (тип_данных название_переменной in контейнер)

{

// действия

}

Например перебор одномерного массива:

int[] array = new int[] { 1, 2, 3, 4, 5 };

foreach (int i in array)

{

Console.WriteLine(i);

}

Перебор строк таблицы значений:

foreach (DataRow Row in Table.Rows)

{

//действия

}

Перебор списка значений

foreach (object o in list)

{

Console.WriteLine(o);

}

Пример работы с таблицей значений:

static void Main(string[] args)

{

DataTable table = new DataTable(); //создаем объект таблица

//создаем столбцы

table.Columns.Add("Dosage", typeof(int));

table.Columns.Add("Drug", typeof(string));

table.Columns.Add("Patient", typeof(string));

table.Columns.Add("Date", typeof(DateTime));

//добавляем строки

table.Rows.Add(25, "Indocin", "David", DateTime.Now);

table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);

table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);

table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);

table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);

Console.Write("Таблица");

Console.WriteLine();

foreach (DataRow r in table.Rows)

{

foreach (var cell in r.ItemArray)

Console.Write(cell+"\t\t");

Console.WriteLine();

}

Console.Read(); }

Работа с файлами

Большинство задач в программировании так или иначе связаны с работой с файлами и каталогами. Нам может потребоваться прочитать текст из файла или наоборот произвести запись, удалить файл или целый каталог, не говоря уже о более комплексных задачах, как например, создание текстового редактора и других подобных задачах.

Фреймворк .NET предоставляет большие возможности по управлению и манипуляции файлами и каталогами, которые по большей части сосредоточены в пространстве имен System.IO. Классы, расположенные в этом пространстве имен (такие как Stream, StreamWriter, FileStream и др.), позволяют управлять файловым вводом-выводом.

Работа с дисками

Работу с файловой системой начнем с самого верхнего уровня - дисков. Для представления диска в пространстве имен System.IO имеется класс DriveInfo.

Этот класс имеет статический метод GetDrives, который возвращает имена всех логических дисков компьютера. Также он предоставляет ряд полезных свойств:

· AvailableFreeSpace: указывает на объем доступного свободного места на диске в байтах

· DriveFormat: получает имя файловой системы

· DriveType: представляет тип диска

· IsReady: готов ли диск (например, DVD-диск может быть не вставлен в дисковод)

· Name: получает имя диска

· TotalFreeSpace: получает общий объем свободного места на диске в байтах

· TotalSize: общий размер диска в байтах

· VolumeLabel: получает или устанавливает метку тома

Получим имена и свойства всех дисков на компьютере:

Получим имена и свойства всех дисков на компьютере:

using System;

using System.Collections.Generic;

using System.IO;

namespace FileApp

{

class Program

{

static void Main(string[] args)

{

DriveInfo[] drives = DriveInfo.GetDrives();

foreach (DriveInfo drive in drives)

{

Console.WriteLine("Название: {0}", drive.Name);

Console.WriteLine("Тип: {0}", drive.DriveType);

if (drive.IsReady)

{

Console.WriteLine("Объем диска: {0}", drive.TotalSize);

Console.WriteLine("Свободное пространство: {0}", drive.TotalFreeSpace);

Console.WriteLine("Метка: {0}", drive.VolumeLabel);

}

Console.WriteLine();

}

Console.ReadLine();

}

}

}

Работа с каталогами

Для работы с каталогами в пространстве имен System.IO предназначены сразу два класса: Directory и DirectoryInfo.

Класс Directory

Класс Directory предоставляет ряд статических методов для управления каталогами. Некоторые из этих методов:

  • CreateDirectory(path): создает каталог по указанному пути path
  • Delete(path): удаляет каталог по указанному пути path
  • Exists(path): определяет, существует ли каталог по указанному пути path. Если существует, возвращается true, если не существует, то false
  • GetDirectories(path): получает список каталогов в каталоге path
  • GetFiles(path): получает список файлов в каталоге path
  • Move(sourceDirName, destDirName): перемещает каталог
  • GetParent(path): получение родительского каталога

Класс DirectoryInfo

Данный класс предоставляет функциональность для создания, удаления, перемещения и других операций с каталогами. Во многом он похож на Directory. Некоторые из его свойств и методов:

  • Create(): создает каталог
  • CreateSubdirectory(path): создает подкаталог по указанному пути path
  • Delete(): удаляет каталог
  • Свойство Exists: определяет, существует ли каталог
  • GetDirectories(): получает список каталогов
  • GetFiles(): получает список файлов
  • MoveTo(destDirName): перемещает каталог
  • Свойство Parent: получение родительского каталога
  • Свойство Root: получение корневого каталога

Посмотрим на примерах применение этих классов

Наши рекомендации