Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Лекция!2.doc
Скачиваний:
7
Добавлен:
26.09.2019
Размер:
256 Кб
Скачать

Описание класса в с#

Синтаксис описания класса

[Атрибуты] [Модификаторы] class ИмяКласса [:СписокПредков]

{

ТелоКласса

}

Атрибуты:

  • Задают дополнительные возможности класса

  • Бывают стандартными и пользовательскими

  • Записываются в квадратных скобках

Модификаторы:

  • Определяют доступность класса для других объектов программы (м. доступа)

  • Указывают свойства класса (м. Свойства)

Модификаторы доступа:

  • Public (открытый) – неограничен

  • Private (закрытый) – закрыт для всех

  • Protected (защищенный) – открыт для потомков

  • Internal (внутренний) – открыт для класса программы (по умолчанию)

  • Protected internal – открыт для потомков и классов программы

(выделенные только для вложенных классов)

Модификаторы свойств:

  • New – задает новое описание вложенного класса взамен унаследованного

  • Abstract – абстрактный класс

По умолчания никогда не устанавливаются

Класс с модификатором abstract называется абстрактным

Для абстрактного класса невозможно создавать экземпляры класса, но можно задавать потомков.

Пример Array

  • Sealed – запечатанный класс

Класс с модификатором sealed является запечатанным (бесплодным) классом

Запечатанные классы не могут иметь потомков

Многие стандартные типы (классы) являются запечатанными

Пример String

  • Static – статистический класс

Класс с модификатором static является статическим классом

Экземпляры статического класса запрещено создавать

От статического класса нельзя наследовать

Статические классы могут иметь только статические поля и методы.

Пример Math

Список предков:

  • В С# не может состоять более чем из одного класса, но может содержать несколько интерфейсов (спец. Вид классов, не имеющих реализации).

  • Если имя предка не указано, то предком считается базовый класс всей иерархии – System.Object.

Примеры писания классов:

Class MyClass1 {} // internal

Public Class MyClass2 {} // public

Class MyClass: MyClass1

{

Private class MyClass4 {}

Protected class MyClass5 : MyClass2 {}

}

В состав класса могут входить:

  • Константы

  • Поля

  • Конструкторы и деструкторы

  • Методы

  • События

  • Классы

  • Делегаты

  • Структуры

  • Интерфейсы

  • Перечисления

Поля класса:

  • Поле – это переменная, объявленная на уровне класса

  • Поля описывают свойства объектов класса

  • При создании новый объект класса представляет собой набор полей класса

  • Два объекта одного класса имеют один и тот же набор полей, но отличаются расположением в памяти и значениями, хранимыми в этих полях.

Синтаксис описания поля:

[Атрибуты]

[Модификаторы] [const] ТипПоля

ИмяПоля [=НачальноеЗначение]

Модификаторы доступа:

  • Private – по умолчанию

  • Public

  • Protected

  • Internal

  • Protected internal

  • Независимо от значения модификатора доступа все поля доступны для всех методов того класса, в которых эти поля описаны.

  • Если поля доступны только для методов класса, то они называются закрытыми.

  • Если некоторые поля класса должны быть доступны для методов класса-потомка – protected.

  • Если некоторые поля должны быть доступны для методов классов, помещенных в одну сборку (assembly) с создаваемым классом – internal.

  • Protected internal применяется для полей, доступ к которым возможен из любого кода в сборке, в котором он объявлен, или же из классов-потомков в другой сборке.

  • Если некоторые поля должны быть доступны для методов любого класса, которому доступен сам создаваемый класс – public.

Модификаторы свойств:

  • New – новое описание поля, заменяющее унаследованное.

  • Static – статическое поле

Статические поля и константы существуют в единственном экземпляре для всех объектов класса

К ним обращаются не по имени экземпляра, а по имени класса.

  • Readonly – поле только для чтения

Поле с модификатором readonly можно изменять только при объявлении иои при вызове конструктора

Отличие от констант – конструктор можно вызывать многократно, меняя значение поля readonly.

  • Volatile – поле могут изменять другие процессы или потоки

Константы фактически являются статическими полями, доступными только для чтения, значения которых задаются при инициализации.

Поля класса

Когда создается новый объект класса, то он содержит полный набор всех полей класса.

Методы класса

  • Метод – процедура или функция, объявленная в классе.

  • Метод определяет поведение объектов класса

  • 2 объекта одного класса имеют один и тот же набор методов

  • Синтаксис описания:

[атрибуты]

[модификаторы] ТипРезультата

Имя метода ([списокПараметров])

{

ТелоМетода

}

Модификаторы доступа

  • Private – по умолчанию

Закрытыя поля и методы

  • Public

Открытые поля и методы, задают интерфейс класса

  • Protected

  • Internal

  • Protected internal

Модификаторы свойств

  • Static(статистический)

Используется при объявлении метода, который принадлежит всему типу, а не конкретному объекту, таким образом, вызов статистических методов происходит через обращение к имени класса, а не к имени объекта.

  • Abstract (абстрактный)

  • Virtual (виртуальный)

Используется при объявлении метода, реализацию которого можно переопределить в производном классе, при переопределении используется override.

  • Override (переопределенный)

  • Sealed (запечатанный)

Используется для метода, который переопределяет виртуальный метод в базовом классе, что позволяет классам наследовать от созданного класса, но запрещает им при этом переопределять эти виртуальные методы

  • Extern (внешний)

Указывает на то, что объявляется метод с внешней реализацией.

Методы класса

  • Сигнатура метода – совокупность имени, метода, количества, типов и способов передачи параметров.

  • В сигнатуру не входят не имена параметров, ни тип возвращаемого значения

  • В классе не должно быть методов с одинаковыми сигнатурами.

  • Сигнатуры используются для механизма перегрузки.

  • Перегрузка – позволяет использовать в одном классе несколько методов с одинаковыми именами, но с разными типами параметров

  • Перегрузка полезна, когда требуется решать однотипные задачи с разными наборами параметров.

  • Пример перегрузки.

Максимум 2 целх чисел:

Int max (int a? ain b)

Максимум 3х целых чисел

Int max (int a? ain b, int c)

  • При вызове метода компилятор выбирает вариант метода, соответствующий типу передаваемых в метод аргументов.

  • Сигнатуры перегруженным методов должны отличаться.

Параметры методов

Виды параметров:

  • Параметры-значения – в метод передается значене переменной

  • Параметры-ссылки (ref) – в метод передается адрес переменной

  • Выходные параметры (out)

  • Массив параметров (params)

  • Переменное число аргументов

  • Только один и в конце списка параметров

Типы в С#:

Value types

Reference types

Void

Pointes

  • В метод всегда передается неявно параметр this – указатель на объект, который вызывает метод.

  • Параметр this нужен для идентификации конкретного экземпляра, вызвавшего метод, тк методы для всех экземпляров класса общие, а поля – разные, те чтобы метод работал с нужными полями.

  • Пример:

Class MyClass

{

Double y:

Public MyClass GetSelf()

{

Return this; //ссылка на объект

}

Public void SetY (double y)

{

This.y =y; . // разрешение конфликта

}

}

Специальные методы:

  1. Конструкторы

  • Конструктор предназначен для инициализации объекта.

  • Является обязательным элементом любого класса

  • Конструктор вызывается автоматически при создании объекта класса с помощью операции new.

  • Имя конструктора совпадает с именем класса

Свойства конструкторов:

  • Конструктор не возвращает значение, даже void

  • Класс может иметь несколько конструкторов с разными параметрами

  • Если программист не указал ни одного конструктора или какие-то поля не были инициализированы, полям значимых типов присваивается нуль, полям ссылочных типов – значение null.

  • Конструктор, вызываемы без параметров, это конструктор по умолчанию.

  • Если в классе явно не задан ни один конструктор, то к классу автоматически добавляется конструктор по умолчанию

  • Если в классе явно определен один или несколько конструкторов, то автоматического добавления конструктора без аргумента…

Class MyClass

{

Public int y;

Public MyClass () // конструктор по умолчанию

{

y=1

}

  • Конструкторы не наследуются потомками, поэтому любой класс должен содержать собственный конструктор

  • Если один из конструкторов выполняет какие-то действия, а другой должен делать тоже самое + еще что-нибудь, можно вызвать первый конструктор из второго, используя ключевое слово this. Пример:

Class MyClass

{

Public int x, y;

Public MyClass (int x0)

{

X=x0;

}

Public MyClass (int x0, int y0) : this (x0)

{

Y=y0;

}

}

  • Статические классы могут иметь только статические конструкторы: static имя_класса ()

  • Статистические конструкторы: не имеют модификаторов и параметров; вызываются только автоматически.