- •Введение в программирование на 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
- •Отметьте истинные высказывания:
- •Все аргументы события принадлежат:
Статические элементы
В ходе изучения данного пособия Вы должны усвоить объектно-ориентированный стиль программирования. Кратко это можно описать таким образом.
1. Сначала создайте классы – полезные правила для создания объектов.
2. Далее создавайте объекты – экземпляры этих классов и заставляйте их выполнять нужную Вам работу.
Таким образом в процессе выполнения программы непосредственно действуют объекты. Однако в некоторых случаях естественнее считать, что действия выполняются самим классом. Хорошим примером является класс Math – все его методы вызываются от имени класса:
Console.WriteLine(Math.Sin(0.5)+Math.Cos(0.5));
Было бы довольно странно для вычисления математических функций сначала создавать объект-«математику»:
Math m1=new Math();
Console.WriteLine(m1.Sin(0.5)+m2.Cos(0.5));
Это означало бы, что можно создавать несколько «математик». Но ведь они все должны действовать абсолютно одинаково.
Аналогично дело обстоит и с переменными – бывают случаи, когда некоторые данные естественнее представлять не как порцию информации, принадлежащую объекту, а классу в целом. В классе Math эта ситуация встречается при доступе к тригонометрической константе - Math.PI.
Элементы класса (переменные и методы), которые соотносятся не с объектами, а с классом, называются статическими. В описании статических элементов используется ключевое слово static. В отличие от статических членов обычные элементы класса называются элементами экземпляров класса – методы экземпляров и переменные экземпляров.
Переменные экземпляра описываются в классе и хранятся в объектах класса. Статические переменные описываются и хранятся (в единственном числе) в классе, как показано на следующем рисунке:
Рассмотрим следующий пример. Класс Person моделирует ситуацию, когда множество людей располагают некоторым общим запасом пищи и делят его поровну. Количество пищи FoodQuantity и количество людей PeopleCount – характеристики всей совокупности людей. Поэтому они описаны как статические переменные. Метод Description описывает состояние всего множества людей и также является статическим методом.
class Person
{ public static double FoodQuantity = 100.0;
public static int PeopleCount = 0;
public double Weight;
public Person()
{ Weight = 10.0; PeopleCount++; }
public void ToEat()
{ double t = FoodQuantity / 2.0 / PeopleCount;
Weight += t; FoodQuantity -= t;
}
public static string Description()
{ return String.Format("Людей - {0} Еды - {1}",
PeopleCount,FoodQuantity);
}
}
class Program
{ static void Main(string[] args)
{ Person p1 = new Person(); p1.ToEat();
Console.WriteLine("Вес p1 - {0}", p1.Weight);
Console.WriteLine(Person.Description());
Person p2 = new Person(); Person p3 = new Person();
p1.ToEat(); Console.WriteLine("Вес p1 - {0}",p1.Weight);
Console.WriteLine(Person.Description());
}
}
Статические методы могут использовать только статические переменные и другие статические методы класса. Попытка использовать в методе Description переменную Weight привела бы к ошибке компилятора.
Для инициализации статических переменных можно использовать статический конструктор:
static Person()
{ FoodQuantity = 100.0; PeopleCount = 0; }
Если в начале изучения языка C# не сразу используются его объектно-ориентированные возможности, структура программы выглядит примерно следующим образом:
class Program
{ static void Main(string[] args)
{ Do1();
Console.WriteLine(Do2());
}
static void Do1() { Console.WriteLine("метод Do1"); }
static string Do2() { return "метод Do2"; }
}
Таким образом, можно не обращать внимания на наличие в программе класса Program. Программа сстоит из нескольких статических методов, которые вызываются в «главном» методе Main.
