- •Введение в программирование на c# в .Net Что такое .Net и зачем она нужна?
- •Первая программа на c# и основные приемы работы в системе ms Visual Studio
- •Структура программы
- •Собственные пространства имен
- •Особенности языка c#
- •Полноценный логический тип данных
- •Оператор switch
- •Основные классы
- •Класс Console
- •Класс Convert
- •Строковый тип данных string (класс String)
- •Метод Split
- •Enumeration – перечислимый тип
- •Метод IndexOf()
- •Метод Format
- •Метод ToCharArray
- •Объектно-ориентированное программирование Эволюция от структур к классам Используем структуры
- •Структурный тип как параметр
- •Помещаем метод в структурный тип
- •Превращение в класс
- •Классы и объекты
- •Значимые и ссылочные переменные
- •Конструкторы класса
- •Статические элементы
- •Генерация случайных чисел
- •Массивы в языке c#
- •Многомерные массивы
- •Класс ArrayList
- •Инкапсуляция
- •Обработка ошибок
- •Свойства класса
- •Язык uml
- •Связи между объектами
- •Наследование (Inheritance)
- •Класс Object
- •Защищенные переменные
- •Вызов базового конструктора
- •Переопределение методов. Обращение к «затененным» элементам класса
- •Многоуровневое наследование
- •Полиморфизм
- •Метод ToString
- •Типичные ситуации проявления полиморфизма
- •Абстрактные классы и полиморфизм
- •Литература
- •Лекция 21. События Классы с событиями
- •Класс sender. Как объявляются события?
- •Делегаты и события
- •Как зажигаются события
- •Классы receiver. Как обрабатываются события
- •Классы с событиями, допустимые в .Net
- •Пример «Списки с событиями»
- •Две проблемы с обработчиками событий
- •Классы с большим числом событий
- •Проект «Город и его службы»
- •Вариант 1
- •Обработчик события:
- •Отметьте истинные высказывания:
- •Вариант 2
- •Вариант 3
- •Отметьте истинные высказывания:
- •Все аргументы события принадлежат:
Enumeration – перечислимый тип
Возможно, концепция перечислимых типов Вам уже знакома. Поэтому, ограничимся классическим, в этом случае, примером. Допустим, программа должна определять количество отработанных часов по правилу: понедельник, вторник, среда, четверг – 8 часов, пятница – 7, суббота и воскресенье – 0.
Для представления дня недели опишем перечислимый тип
enum WeekDay = {San, Mon, Tue, Wed, Thu, Fri, Sat};
Теперь функция, определяющая количество отработанных часов может выглядеть следующим образом:
static int WorkOurs (WeekDay wd)
{
switch(wd)
{
case WeekDay.San: case WeekDay.Sat: return 0;
case WeekDay.Mon: case WeekDay.Tue:
case WeekDay.Wed: case WeekDay.Thu: return 8;
case WeekDay.Fri: return 7;
}
}
В последнем примере использования метода Split второй параметр является параметром стандартного перечислимого типа StringSplitOptions, определенного в .NET, а RemoveEmptyEntries – одним из значений этого типа.
Метод IndexOf()
Этот метод возвращает позицию первого вхождения строки, в строке, вызывающей этот метод. Если подстроки в строке нет, метод возвращает -1.
String s=”Hello, Helen!”;
Console.WriteLine(s.IndexOf(“He”); //выводит 0
Console.WriteLine(s.IndexOf(“he”); //выводит -1
Чтобы найти последующие (после первого) вхождения, можно применить перегруженную версию IndexOf, второй параметр которого указывает позицию, с которой нужно начинать поиск строки в подстроке. С помощью этого метода следующий фрагмент выводит все вхождения подстроки.
int k=0;
while (k!=-1)
{
k= s.IndexOf(“He”,k);
Console.WriteLine(k); //выводит 0
k++;
}
Метод Format
Синтаксис и действие этого метода похожи на метод Console.WriteLine. Отличие в том, что WriteLine выводит сформированную строку на экран, а Format возвращает эту строку для дальнейшего использования в программе.
Метод Format является статическим и вызывается от имени класса:
String s=String.Format(“{0}x{1}={2} и {2}={1}x{0}”,2,3,2*3);
В результате сформирована строка “2x3=6 и 6=3*2”
Метод ToCharArray
Набор методов класса String не может быть идеальным средством для решения всех задач обработки текстов. Существует немало даже простых задач, которые «неудобно» решать этими методами. В этом случае остается последнее средство – решать задачу, рассматривая строку как массив символов. Однако, как уже было сказано ранее, индексированный доступ к символам строки возможен только для чтения. Именно в этом случае Вам понадобится метод ToCharArray, который «разбирает» целостный объект-строку на массив символов. В следующем примере решается простая задача инвертирования символов строки:
String s=”телефон”;
char ch;
char chAr=s.ToCharArray();
for(int i=0; i<char.Length/2; i++)
{ ch=chAr[i]; char[i]=chAr[char.Length-i-1]; chAr[char.Length-i-1]=ch; }
s=new String(char);
Пример демонстрирует, что метод ToCharArray возвращает массив символов. Последняя строка показывает, как можно создать объект-строку из массива символов.
Объектно-ориентированное программирование Эволюция от структур к классам Используем структуры
Напомним, как использовать традиционные уже в языке Си структурные типы и их переменные – структуры.
struct Person
{ public string Name;
public double Height;
public double Weight;
}
class Program
{ static void Main(string[] args)
{ Person me, you;
me.Name="Это я"; me.Height=190.0; me.Weight=85;
you.Name="Это ты"; you.Height=140.0; you.Weight=85;
PersonAnalyze(me.Height,me.Weight,me.Name);
PersonAnalyze(you.Height,you.Weight,you.Name);
}
static void PersonAnalyze(double h,double w,string n)
{ if (h - w > 100.0) Console.WriteLine(n + " худой");
else Console.WriteLine(n + " полный");
}
}
В определении структурного типа Person (стр.01-05) новым является только использование слова public в описании переменных. Его роль мы выясним позже.
Класс Program условно можно назвать главным классом, поскольку он содержит метод Main, с которого и начнется выполнение программы.
В методе Main описываются две структуры (переменные структурного типа). В отличие от языка Си, в описании структур ключевое слово struct не указывается. Таким образом, переменные me и you являются переменными типа Person.
Далее с помощью операции доступа к полю (операции точка) и операторов присваивания происходит заполнение переменных me и you информационным содержимым (стр.09-10).
Наконец, в стр. 11 и 12 вызывается метод PersonAnalyze класса Program сначала с данными структуры me, а затем с данными структуры you. Заметим, что метод PersonAnalyze, как и метод Main описан как static. На экране должен появиться следующий результат:
Это я полный
Это ты худой
