
- •Лекции по курсу "Технология программирования" (1-й семестр) Оглавление
- •Технология .Net Предыдущее состояние дел.
- •Главные компоненты платформы .Net (clr, cts и cls)
- •Общеязыковая среда выполнения (clr)
- •О бщая система типов и общеязыковые спецификации (cts и cls)
- •Библиотека базовых классов
- •Роль языка с#
- •Компоновочные блоки
- •Роль метаданных типов .Net
- •Роль манифеста компоновочного блока
- •Общая система типов.
- •Объектно-ориентированное программирование
- •Главные элементы объектно-ориентированного подхода
- •Дополнительные элементы ооп
- •Принципы объектно-ориентированного программирования.
- •Классы Инкапсуляция
- •Объект (экземпляр класса).
- •Ключевое слово this
- •Отношения между объектами.
- •Основные отличительные особенности класса
- •Спецификаторы доступа
- •Состав класса
- •Поля класса
- •Доступ к полям
- •Статические и экземплярные переменные
- •Методы (функции-члены класса)
- •Переменное число параметров метода
- •Статические методы
- •Конструкторы
- •Закрытые конструкторы или классы без экземпляров
- •Статические конструкторы.
- •Деструкторы
- •Абстрактные методы и классы.
- •Свойства
- •Индексаторы
- •Статические классы
- •Частичные классы
- •Рекомендации по программированию
- •Наследование Понятие наследования в программировании
- •Типы наследования
- •Наследование реализации
- •Определение наследующих классов
- •Уровень доступа protected и internal
- •Ссылка на объект базового класса
- •Протоклассы
- •Предотвращение наследования с помощью ключевого слова sealed.
- •Отношения между классами
- •Абстрактные классы.
- •Класс object
- •Функциональные замыкания
- •Разработка функциональных замыканий с помощью наследования
- •Разработка функциональных замыканий с помощью экземпляров класса
- •Заключение.
- •Полиморфизм
- •Полиморфизм наследующих классов.
- •Переопределение методов родительского класса. Раннее связывание.
- •Виртуальные методы и их переопределение.
- •Как вызывают виртуальные методы
- •Виртуальные функции и принцип полиморфизма
- •Перегрузка.
- •Перегруженные конструкторы
- •Рекомендации программисту.
Статические и экземплярные переменные
Статические переменные – это переменные класса, объявленные с указанием служебного слова static. Значения этих переменных одинаковы для всех экземпляров класса. Поэтому обращение к ним производится по имени класса, а не по имени экземпляра. Экземплярные переменные для каждого экземпляра могут хранить свое значение.
Модификатор static декларирует принадлежность члена класса всему классу (всем экземплярам класса), а не конкретному его экземпляру. Доступ к таким членам осуществляется только через имя класса, а не его экземпляра.
Поля, описанные со спецификатором static, а также константы существуют в единственном экземпляре для всех объектов класса, поэтому к ним обращаются не через имя экземпляра, а через имя класса. Обращение к полю класса выполняется с помощью операции доступа (точка). Справа от точки задается имя поля, слева — имя экземпляра для обычных полей или имя класса для статических. Рассмотрим пример создания класса Demo и два способа обращения к его полям.
class Circle
{
public int x=0;
public int y=0;
public int radius=3;
public const double pi = 3.14;
public static string name = "Окружность";
double p;
double s;
}
class Program
{
static void Main()
{
Circle cr = new Circle(); //создание экземпляра класса
Console.WriteLine("pi=" + Circle.pi);// обращение к константе
Console.Write(Circle.name);// обращение к статическому полю
//обращение к обычным полям
Console.WriteLine(" с центром в точке ({0},{1}) и радиусом {2}", cr.x, cr.y, cr.radius);
// Console.WriteLine(cr.p); - вызовет ошибку, т.к. поле p, c имеют тип private
Console.Write("Введите коэффициент= ");
int kof = int.Parse(Console.ReadLine());
cr.x -= kof; cr.y += kof; cr.radius *= kof;
Console.WriteLine(" Новая окружность с центром в точке ({0},{1}) и радиусом {2}",
cr.x, cr.y, cr.radius);
//cr.s = 2 * Circle.pi * cr.radius; - вызовет ошибку, т.к. поле s, c имеют тип private
}
}
Методы (функции-члены класса)
Метод – это функциональный элемент класса, который реализует вычисления или другие действия, выполняемые классом или его экземпляром (объектом). Метод представляет собой законченный фрагмент кода, к которому можно обратиться по имени. Он описывается один раз, а вызываться может многократно. Совокупность методов класса определяет, что конкретно может делать класс. Другими словами, методы определяют поведение класса. Например, стандартный класс System.Math содержит методы, которые позволяют вычислять значения математический функций.
Таким образом, методы представляют собой действия (функции), которые можно произвести с объектами данного класса. Например:
public class My
{
private int a, b;
public My( int x, int y ){ a = x; b = y; }
//public My( int a, int b ){ this.a = a; this.b = b; }
public int Max(){ return a > b ? a : b; }
}
public class Application
{
public static void Main()
{
My helper = new My(2, 10);
Console.WriteLine("MAX(2, 10) = {0}", helper.Max());
}
}
Возможные модификаторы методов – это уже рассмотренные модификаторы доступа такие, как public, static, protected, abstract.
Модификатор static имеет тот же смысл, что и у полей. Он указывает, что метод принадлежит классу, а не конкретному экземпляру. Поэтому работать такой метод может только со статическими членами:
public class SampleClass
{
public static int a;
public int b;
public static void DoubleA(){ a *= 2; }
public void SetB(){ b = a; }
}
public class Application
{
public static void Main()
{
SampleClass sc1 = new SampleClass(), sc2 = new SampleClass();
SampleClass.a = 1;
sc1.SetB();
SampleClass.a = 2;
sc2.SetB();
Console.WriteLine("sc1.b = {0}, sc2.b = {1}", sc1.b, sc2.b);
}
}
Методам также можно передавать параметры, которые определяют его действия.
Формат списка параметров такой: <модификатор параметра> < тип параметра> < имя параметра>
Единственной необычной частью является модификатор параметра. Существуют следующие модификаторы параметров:
out - указывает, что значение параметра не передается в метод, а возвращается из него. Реально это означает, что можно передавать только переменную, она может быть не инициализирована и ее значение может быть изменено в методе.
ref - указывает, что параметр передается по ссылке. То есть, если в теле метода будет изменено его значение, изменится и значение передаваемой переменной. С модификатором ref передаваться могут только переменные.
Также существует возможность декларировать метод как принимающий произвольное число аргументов. Для этого используется следующий синтаксис:
<param> <тип элемента[]><имя списка>
Для пояснения рассмотрим следующий пример:
class Application
{
static void SampleMethod( string text, params string[] args )
{
Console.WriteLine(text);
foreach (string s in args){ Console.WriteLine(s); }
}
public static void Main()
{
SampleMethod("Parameters list:", "Param1", "Param2", "Param3");
}
}