
- •Лекции по курсу "Технология программирования" (1-й семестр) Оглавление
- •Технология .Net Предыдущее состояние дел.
- •Главные компоненты платформы .Net (clr, cts и cls)
- •Общеязыковая среда выполнения (clr)
- •О бщая система типов и общеязыковые спецификации (cts и cls)
- •Библиотека базовых классов
- •Роль языка с#
- •Компоновочные блоки
- •Роль метаданных типов .Net
- •Роль манифеста компоновочного блока
- •Общая система типов.
- •Объектно-ориентированное программирование
- •Главные элементы объектно-ориентированного подхода
- •Дополнительные элементы ооп
- •Принципы объектно-ориентированного программирования.
- •Классы Инкапсуляция
- •Объект (экземпляр класса).
- •Ключевое слово this
- •Отношения между объектами.
- •Основные отличительные особенности класса
- •Спецификаторы доступа
- •Состав класса
- •Поля класса
- •Доступ к полям
- •Статические и экземплярные переменные
- •Методы (функции-члены класса)
- •Переменное число параметров метода
- •Статические методы
- •Конструкторы
- •Закрытые конструкторы или классы без экземпляров
- •Статические конструкторы.
- •Деструкторы
- •Абстрактные методы и классы.
- •Свойства
- •Индексаторы
- •Статические классы
- •Частичные классы
- •Рекомендации по программированию
- •Наследование Понятие наследования в программировании
- •Типы наследования
- •Наследование реализации
- •Определение наследующих классов
- •Уровень доступа protected и internal
- •Ссылка на объект базового класса
- •Протоклассы
- •Предотвращение наследования с помощью ключевого слова sealed.
- •Отношения между классами
- •Абстрактные классы.
- •Класс object
- •Функциональные замыкания
- •Разработка функциональных замыканий с помощью наследования
- •Разработка функциональных замыканий с помощью экземпляров класса
- •Заключение.
- •Полиморфизм
- •Полиморфизм наследующих классов.
- •Переопределение методов родительского класса. Раннее связывание.
- •Виртуальные методы и их переопределение.
- •Как вызывают виртуальные методы
- •Виртуальные функции и принцип полиморфизма
- •Перегрузка.
- •Перегруженные конструкторы
- •Рекомендации программисту.
Статические конструкторы.
Существует второй тип конструкторов — статические конструкторы, или конструкторы класса. Конструктор экземпляра инициализирует данные экземпляра, конструктор класса — данные класса. Статический конструктор не имеет параметров, его нельзя вызвать явным образом. Система сама определяет момент, в который требуется его выполнить. Гарантируется только, что это происходит до создания первого экземпляра объекта и до вызова любого статического метода. Некоторые классы содержат только статические данные, и, следовательно, создавать экземпляры таких объектов не имеет смысла. Чтобы подчеркнуть этот факт, в первой версии С# описывали пустой закрытый ( p r i v a t e ) конструктор. Это предотвращало попытки создания экземпляров класса.
Эти конструкторы инициализируют класс в целом. Никто не знает когда происходит его вызов - гарантируется лишь то, что он будет вызван до создания первого экземпляра класса. Если обычный конструктор вызывается в момент создания экземпляра класса, то статический - в самом начале, т. е. перед созданием первого экземпляра класса.
Статические конструкторы (static constructor) используются для инициализации статических, неизменяемых (readonly) и других полей.
В статическом конструкторе можно задать начальные значения для статических переменных класса. Вот пример:
class MyClass
{
public static int data;
//Статический конструктор
static MyClass() { data=10; }
//Конструктор
public MyClass() { data++; }
}
class Test
{
public static void Main()
{
MyClass a=new MyClass();
MyClass b=new MyClass();
System.Console.WriteLine(MyClass.data);
}
}
Указанный фрагмент выведет на экран 12. Действительно, сначала вызовется статический конструктор, который присвоит значение 10 переменной data. Затем для каждого созданного экземпляра класса MyClass вызовется обычный конструктор, в котором переменная data увеличится каждый раз на 1.
Обратите внимание, что оба конструктора без параметра. Противоречия тут нет, так как один из них - статический, а другой - нет.
Деструкторы
Деструктор - это метод, который вызывается при уничтожении объекта. Так как в .NET CLR используется сборщик мусора, нельзя явно удалить определенный экземпляр. Удаление происходит когда никакой код уже не может воспользоваться этим экземпляром. Деструкторы определяются как методы с именем, совпадающим с именем класса, предваренным знаком ~ (тильда):
public class A
{
~A { Console.WriteLine("Меня удаляют!"); }
}
public class Application
{
public static void Main() { A a = new A(); a = null; }
}
Программа выведет: "Меня удаляют!"
Абстрактные методы и классы.
Методы класса могут быть объявлены как абстрактные. Это означает, что в этом классе нет реализации этих методов. Другими словами, такие методы в классе объявлены, но не определены. Абстрактные методы пишутся с применением к ним модификатора abstract. Класс, в котором есть хотя бы один абстрактный метод, тоже называется абстрактным. Следует отметить, что в таком классе могут быть и обычные методы, которые в нем объявлены и определена их реализация. Нельзя создавать экземпляры абстрактного класса - такой класс может использоваться только в качестве базового класса для построения других классов. При этом, для потомка абстрактного класса есть только две возможности - или он реализует все абстрактные методы базового класса (и тогда для такого класса-потомка мы сможем создавать его экземпляры), или он реализует не все абстрактные методы базового класса (и тогда производный класс тоже будет абстрактным классом и единственная возможность его использования - это создавать на его основе другие классы-потомки).