- •Классы. Создание экземпляров класса. Особенности перегрузки конструкторов
- •Классы: особенности инициализации полей, поля const и readonly
- •Статические элементы класса. Статический конструктор.
- •Индексаторы
- •Механизмы наследования. Объявление наследования.
- •Конструкторы производных и базовых классов. Использование ключевого слова base.
- •Скрытие наследуемых элементов.
- •Переопределение наследуемых элементов.
- •Полиморфное поведение производных классов.
- •Абстрактные методы и классы.
- •Интерфейсы. Операции is и as.
- •Разработка и использование интерфейсов.
- •Делегаты.
- •События. Правила использования стандартных делегатов.
Статические элементы класса. Статический конструктор.
Статич.переменные. Обычно переменные класса принадлежат конкретному экземпляру класса. Для обращения к таким переменным мы пишем (например)
MyClass z; k=z.data;
Здесь переменная data принадлежит классу MyClass. Для каждого экземпляра класса она своя. Наряду с обычными переменными существуют и статические переменые класса. Их основное отличие от обычных переменных в том, что они относятся к классу целиком. Т. е. на все экземпляры класса у нас есть только одна переменая. Получить доступ к такой переменой можно только для самого класса без создания его экземпляра. Через конкретный же экземпляр класса доступа к такой перемнной нет. Т. е. использовать такую статическую переменную можно только для самого класса без создания экземпляра. Для объявления переменной статический надо использовать ключевое слово static:
public static int data;
Обращение к этой переменной будет: MyClass.data;
Доступ к статическому полю может получить и нестатический метод (обратное невозможно – статический метод не может получить доступ к нестатическому полю).
Неявно статическими являются поля класса с модификатором const.
Статич.методы. Метод, который вызывается без создания экземпляра класса.
Обычный конструктор вызывается в момент создания экземпляра класса, то статический - в самом начале, т.е. перед созданием первого экземпляра класса.
В статическом конструкторе можно задать начальные значения для статических переменных класса.
Для статич полей может быть предусмотрен статич констр
(единственный, без перегрузки): без аргументов, и даже без спецификатора public . Он вызывается автоматически до создания первого экземпляра типа или до первого обращения к одному из статических полей. Статич поля часто называют «полями класса» в отличие от нестатич, которые называют полями экземпляра (или экземплярными). То же относится и к методам. Если класс содержит только статические элементы, его можно объявить также статич. При этом его экземпляры с помощью оператора new, создавать нельзя!
Для того, чтобы «привязать» нестатич методы к экземпляру класса, как раз и добавл ссылка this в список аргументов метода. Статич методы не имеют скрытого параметра this , так как их не нужно «привязывать» к экземпляру.
Константные элементы класса и вложенные типы становятся статич неявно.
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.