
- •Основы c#. Урок 1. Что такое c#?
- •Основы c#. Урок 2. Что такое net Runtime?
- •Основы c#. Урок 3. Первая программа на c#
- •Основы c#. Урок 4. Переменные языка c#
- •Основы c#. Урок 5. Логические операторы
- •Основы c#. Урок 6. Массивы в c#
- •Основы c#. Урок 7. Операторы if и switch
- •Основы c#. Урок 8. Циклы for и foreach
- •Основы c#. Урок 9. Цикл while
- •Основы c#. Урок 10. Классы в c#
- •Основы c#. Урок 11. Конструкторы классов
- •Основы c#. Урок 12. Наследование
- •Основы c#. Урок 13. Запись в экземпляр базового класса экземпляра производного
- •Основы c#. Урок 14. Вложенные классы
- •Основы c#. Урок 15. Перегрузка бинарных операторов
- •Основы c#. Урок 16. Перегрузка унарных операторов
- •Основы c#. Урок 17. Область видимости
- •Основы c#. Урок 18. Виртуальные функции
- •Основы c#. Урок 19. Абстрактные классы
- •Основы c#. Урок 20. Запрещение наследования или модификатор sealed
- •Основы c#. Урок 21. Статические переменные
- •Основы c#. Урок 22. Статические методы класса
- •Основы c#. Урок 23. Статические конструкторы
- •Основы c#. Урок 24. Закрытые конструкторы или классы без экземпляров
- •Основы c#. Урок 25. Передача параметров переменой длины
- •Основы c#. Урок 26. Строки (класс System.String)
- •Основы c#. Урок 27. Строки (класс StringBuilder)
- •Основы c#. Урок 28. Передача параметров по ссылке и по значению (ref и out)
- •Основы c#. Урок 29. Пример передачи по ссылке
- •Основы c#. Урок 30. Перегрузка
- •Основы c#. Урок 31. Функции класса System.Array
- •Основы c#. Урок 32. Делегаты
- •Основы c#. Урок 33. События
- •Основы c#. Урок 34. Пример класса с событием
- •Основы c#. Урок 35. Введение в атрибуты
- •Основы c#. Урок 36. Пример пользовательского атрибута
- •Основы c#. Урок 37. Параметры командной строки
- •Основы c#. Урок 38. Метод Main в отдельном классе
- •Основы c#. Урок 39. Форматированный вывод
- •Основы c#. Урок 40. Класс System.Object
- •Основы c#. Урок 41. Методы класса System.Object
- •Основы c#. Урок 42. Переопределяем методы класса System.Object
- •Основы c#. Урок 43. Константы
- •Основы c#. Урок 44. Модификаторы доступа
- •Основы c#. Урок 45. Ссылка на текущий экземпляр класса (this)
- •Основы c#. Урок 46. Класс Environment
- •Основы c#. Урок 47. Работаем со специальными папками
- •Основы c#. Урок 48. Получаем список всех дисков
- •Основы c#. Урок 49. Ввод/вывод в c# (System.Io)
- •Основы c#. Урок 50. Классы для работы с папками и файлами
- •Основы c#. Урок 51. Класс Directory
- •Основы c#. Урок 52. Класс File
- •Основы c#. Урок 53. Класс FileSystemInfo
- •Основы c#. Урок 54. Класс DirectoryInfo
- •Основы c#. Урок 55. Перечисление FileAttributes
- •Основы c#. Урок 56. Класс FileInfo
- •Основы c#. Урок 57. Пример: получение имен всех подпапок
- •Основы c#. Урок 58. Класс Path
- •Основы c#. Урок 59. Класс FileSystemWatcher
- •Основы c#. Урок 60. Перечисление NotifyFilters
- •Основы c#. Урок 61. Перечисление WatcherChangeTypes
- •Основы c#. Урок 62. Класс FileSystemWatcher - пример использования
- •Основы c#. Урок 63. Сериализация класса
- •Основы c#. Урок 64. Класс BitArray
- •Основы c#. Урок 65. Класс Stack
- •Основы c#. Урок 66. Класс SortedList
- •Основы c#. Урок 67. Конвертация типов через класс Convert
- •Основы c#. Урок 68. Работа с перечислениями (enum)
- •Основы c#. Урок 69. Использование атрибута Flags для перечисления
- •Основы c#. Урок 70. Использование атрибута Flags для перечисления 2
- •Основы c#. Урок 71. Nullable типы
- •Основы c#. Урок 72. Reflection - динамическое создание кода
- •Основы c#. Урок 73. Reflection - создание enum'ов
Основы c#. Урок 65. Класс Stack
Класс Stack предназначен для хранения некоторых данных произвольного типа. Он находится в пространстве имен System.Collections.
Основной принцип действия этого класса - "первый вошел, последний вышел".
Вот пример использования этого класса:
// Создаем класс для добавления его экземпляров в стек.
class DataClass
{
public int a;
public int b;
public DataClass(int a, int b)
{
this.a = a;
this.b = b;
}
public override string ToString()
{
return "a = " + a + ", b = " + b;
}
}
Теперь займемся непосредственно стеком.
// Добавляем данные в стек.
Stack st = new Stack();
DataClass q = new DataClass(2, 3);
st.Push(q);
q = new DataClass(10, 100);
st.Push(q);
// Смотрим последние добавленные данные (без удаления их из стека).
DataClass t = (DataClass)st.Peek();
Console.WriteLine(t);
Console.WriteLine("Count: " + st.Count);
Console.WriteLine();
// Извлекаем последние добавленные данные (с удалением их из стека).
t = (DataClass)st.Pop();
Console.WriteLine(t);
Console.WriteLine("Count: " + st.Count);
Console.WriteLine();
t = (DataClass)st.Pop();
Console.WriteLine(t);
Console.WriteLine("Count: " + st.Count);
Console.WriteLine();
Пример достаточно ясен из комментариев.
Класс Stack позволет обойти все свои элементы. Это можно сделать, например, вот так:
foreach (DataClass d in st)
{
Console.WriteLine(d.ToString());
}
Обратите внимание, на то, что тип данных в стеке не определен (вернее, в стеке хранятся данные типа Object). Поэтому мы везде вынуждены делать приведение типов.
Из других полезных методов и свойств следует отметить еще Clear (очищает весь стек), Contains (позволяет определить, содержит ли наш стек какой-нибудь элемент), ToArray (возвращает массив, состоящий из элементов стека).
Основы c#. Урок 66. Класс SortedList
Класс SortedList предназначен для создания коллекции, элементы которых располагаются сразу в отсортированном по ключу виде. Доступ к элементам SortedList мы можем осуществлять двумя способами - через ключ (как в IDictionary), так и через его номер (как в массивах, например. Но, в отличие от массивов, мы используем не квадратные скобки, а некоторый метод).
Класс SortedList реализует интерфейсы IDictionary и ICloneable и подобно другим классам коллекций расположен в пространстве имен System.Collections.
Рассмотрим работу с основнями методами и свойствами этого класса на примере:
static void Main(string[] args)
{
SortedList sl = new SortedList();
// Добавление элементов.
sl.Add("USA", "Washington");
sl.Add("France", "Paris");
sl.Add("Germany", "Berlin");
// Показ всех элементов.
ShowAll(sl);
// Показываем нулевой элемент (Paris).
Console.WriteLine("sl[0]: {0}", sl.GetByIndex(0));
sl.Add("Denmark", "Copenhagen");
// Показываем нулевой элемент (Copenhagen).
Console.WriteLine("sl[0]: {0}", sl.GetByIndex(0));
// Выясняем, существуют ли определенные ключ и значение.
if (sl.ContainsKey("France"))
Console.WriteLine("There is France key");
else
Console.WriteLine("There is no France key");
if (sl.ContainsValue("Copenhagen"))
Console.WriteLine("There is Copenhagen value");
else
Console.WriteLine("There is no Copenhagen value");
// Поиск индекса ключа и значения.
// -1 - если ничего не найдено.
int keyNum = sl.IndexOfKey("France");
Console.WriteLine("Index of France: {0}", keyNum);
int keyValue = sl.IndexOfValue("Lisbon");
Console.WriteLine("Index of Lisbon: {0}", keyValue);
// Удаление элемента по ключу.
Console.WriteLine("France will be removed.");
sl.Remove("France");
ShowAll(sl);
// Удаление элемента по номеру.
Console.WriteLine("2nd element will be removed.");
sl.RemoveAt(2);
ShowAll(sl);
// Получаем все ключи и все значения.
Console.WriteLine("Keys:");
foreach (string key in sl.Keys) {
Console.WriteLine(key);
}
Console.WriteLine("Values:");
foreach (string key in sl.Values)
{
Console.WriteLine(key);
}
// Удаляем все элементы.
sl.Clear();
ShowAll(sl);
}
// Метод для показа всех элементов и их количества.
static void ShowAll(SortedList sl) {
Console.WriteLine("Count: {0}", sl.Count);
foreach (DictionaryEntry d in sl) {
Console.WriteLine("Key: {0}, Value: {1}", d.Key, d.Value);
}
}
Использование методов должно быть понятно из комментариев. Отметим, что большая часть методов стандартизована и встречается у всех коллекций - так все они реализуют интерфейс IDictionary.
Обратите внимание, что при выводе содержимого нашего SortedList его элементы показываются упорядоченнными по возрастанию ключей. И это несмотря на то, что добавляли их в другом порядке. Т. е. класс SortedList сортирует свое содержимое по значению ключей автоматически. Что не удивительно, так как класс называется SortedList. То, что элементы меняют свой порядок по мере добаления / удаления элементов, видно из следующего фрагмента:
// Показываем нулевой элемент (Paris).
Console.WriteLine("sl[0]: {0}", sl.GetByIndex(0));
sl.Add("Denmark", "Copenhagen");
// Показываем нулевой элемент (Copenhagen).
Console.WriteLine("sl[0]: {0}", sl.GetByIndex(0));
Сначала у нас нулевой элемент был один, а после простого добавления еще одного элемента в наш SortedList нулевой элемент изменился.
Вообще говоря автоматическая сортировка в классе SortedList связана некоторыми накладными расходами. Это значит, что если вам сортировка нужна только пару раз, то, быть может, лучше использовать другой класс (например, написанный вами).