
- •Лекции по курсу "Технология программирования" (1-й семестр) Оглавление
- •Технология .Net Предыдущее состояние дел.
- •Главные компоненты платформы .Net (clr, cts и cls)
- •Общеязыковая среда выполнения (clr)
- •О бщая система типов и общеязыковые спецификации (cts и cls)
- •Библиотека базовых классов
- •Роль языка с#
- •Компоновочные блоки
- •Роль метаданных типов .Net
- •Роль манифеста компоновочного блока
- •Общая система типов.
- •Объектно-ориентированное программирование
- •Главные элементы объектно-ориентированного подхода
- •Дополнительные элементы ооп
- •Принципы объектно-ориентированного программирования.
- •Классы Инкапсуляция
- •Объект (экземпляр класса).
- •Ключевое слово this
- •Отношения между объектами.
- •Основные отличительные особенности класса
- •Спецификаторы доступа
- •Состав класса
- •Поля класса
- •Доступ к полям
- •Статические и экземплярные переменные
- •Методы (функции-члены класса)
- •Переменное число параметров метода
- •Статические методы
- •Конструкторы
- •Закрытые конструкторы или классы без экземпляров
- •Статические конструкторы.
- •Деструкторы
- •Абстрактные методы и классы.
- •Свойства
- •Индексаторы
- •Статические классы
- •Частичные классы
- •Рекомендации по программированию
- •Наследование Понятие наследования в программировании
- •Типы наследования
- •Наследование реализации
- •Определение наследующих классов
- •Уровень доступа protected и internal
- •Ссылка на объект базового класса
- •Протоклассы
- •Предотвращение наследования с помощью ключевого слова sealed.
- •Отношения между классами
- •Абстрактные классы.
- •Класс object
- •Функциональные замыкания
- •Разработка функциональных замыканий с помощью наследования
- •Разработка функциональных замыканий с помощью экземпляров класса
- •Заключение.
- •Полиморфизм
- •Полиморфизм наследующих классов.
- •Переопределение методов родительского класса. Раннее связывание.
- •Виртуальные методы и их переопределение.
- •Как вызывают виртуальные методы
- •Виртуальные функции и принцип полиморфизма
- •Перегрузка.
- •Перегруженные конструкторы
- •Рекомендации программисту.
Переменное число параметров метода
Иногда число аргументов, которые будут переданы методу, неизвестно до периода выполнения. Например, вам нужен класс, который чертит на графике линию, заданную последовательностями х- и у-координат. Этот класс должен содержать методом, принимающим единственный аргумент — объект типа Point, представляющий значения обеих координат х и у. Этот метод должен сохранять каждый объект типа Point в связанном списке или в элементах массива, пока вызывающая программа не даст команду на вывод всей последовательности точек. Однако такое решение может быть не очень эффективным потому, что оно требует наличия в классе связанного списка. Но ведь можно было бы использовать единственный метод — DrawLine, которому этот список может и не потребоваться. Эту проблему эффективно решает метод с переменным количеством аргументов.
Такому методу можно задать переменное число аргументов через ключевое слово params в виде массива. Рассмотрим пример класса Chart, написанного на C#, позволяющего пользователю одним вызовом получить и вывести произвольное число объектов Point:
using System;
class Point //Класс точки
{
public Point(int x, int y) { this.x = x; this.у = у; }
public int x; public int y;
}
class Chart //Класс рисовальщика
{
public void DrawLine(Graphics g, params Point[] p )
{
Console.WriteLine("\пЭтот метод позволяет нарисовать линию " +
"по следующим точкам:");
for (int i = 0; i < p.GetLength(0); i++)
{ Console.WriteLine("{0), {1}". p[i].x, p[i].y); }
}
}
class ChartApp
{
public static void Main()
{
Point p1 = new Point(5,10);
Point p2 = new Point(5, 15);
Point p3 = new Point(5, 20);
Chart chart = new Chart();
chart.DrawLine(p1, p2, p3);
}
}
Метод DrawLine сообщает компилятору C#, что он может принимать переменное число объектов типа Point. Затем в период выполнения метод использует простой цикл for для прохода по всем объектам Point и вывода всех точек.
Статические методы
Статическим называется метод, который существует в классе как в таковом, а не в отдельных его экземплярах. Как и в случае других статических членов, главное преимущество статических методов в том, что они расположены вне конкретных экземпляров класса, не засоряя глобальное пространство приложения. При этом они и не нарушают принципов ООП, поскольку ассоциированы с определенным классом.
Определить метод как статический позволяет ключевое слово static. Затем для вызова метода пользователь применяет синтаксис вида Класс. Метод. Этот синтаксис необходим, даже если у пользователя есть ссылка на экземпляр класса.
Статические (static) методы, или методы класса, можно вызывать, не создавая экземпляр объекта. Именно таким образом используется метод Main.
public class Sample
{
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()
{
Sample sc1 = new Sample(), sc2 = new Sample();
Sample.a = 1;
sc1.SetB();
Sample.a = 2;
sc2.SetB();
Console.WriteLine("sc1.b = {0}, sc2.b = {1}", sc1.b, sc2.b);
}
}
Последним моментом, касающимся статических методов, является правило, определяющее, к каким членам класса можно обращаться из статического метода. Как вы можно догадаться, статический метод может обращаться к любому статическому члену в пределах класса, но не может обращаться к члену экземпляра.