Главная страница

ИГА. Понятие базы данных


Скачать 0.77 Mb.
НазваниеПонятие базы данных
Дата05.04.2022
Размер0.77 Mb.
Формат файлаdocx
Имя файлаИГА.docx
ТипДокументы
#445246
страница22 из 37
1   ...   18   19   20   21   22   23   24   25   ...   37

Интерфейсы в C#.


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

interface IEquatable

{ bool Equals(T obj); }

Интерфейсы описывают группу связанных функциональных возможностей, которые могут принадлежать к любому классу или структуре. Интерфейсы в могут содержать методы, свойства, события, индексаторы или любое сочетание этих перечисленных типов членов. Интерфейсы не могут содержать поля. Члены интерфейсов автоматически являются открытыми.

Когда говорят, что класс или структура наследует интерфейс, это означает, что класс или структура предоставляет реализацию для всех членов, определяемых интерфейсом. Сам интерфейс не предоставляет функциональных возможностей, которые класс или структура могут наследовать таким же образом, каким могут наследоваться функциональные возможности базового класса. Однако если базовый класс реализует интерфейс, производный класс наследует эту реализацию.

Классы и структуры могут быть унаследованы от интерфейсом таким же образом, как классы могут быть унаследованы от базового класса или структуры, но есть два исключения:

  • Класс или структура может наследовать несколько интерфейсов.

  • Когда класс или структура наследует интерфейс, наследуются только имена и подписи методов, поскольку сам интерфейс не содержит реализаций.


Для реализации члена интерфейса соответствующий член класса должен быть открытым и не статическим, он должен обладать таким же именем и подписью, как член интерфейса. Свойства и индексаторы класса могут определить дополнительные методы доступа для свойства или индексатора, определенного в интерфейсе. Например, интерфейс может объявлять свойство с методом доступа get, но класс, реализующий интерфейс, может объявлять это же свойство с методами доступа get и set. Если же свойство или индексатор использует явную реализацию, методы доступа должны совпадать.

Интерфейсы и члены интерфейсов являются абстрактными. Интерфейсы не имеют реализации по умолчанию. Дополнительные сведения см. в разделе Абстрактные и запечатанные классы и члены классов.

Интерфейс IEquatable объявляет пользователю объекта, что объект может определять, равен ли он другому объекту такого же типа, причем пользователь интерфейса не должен знать, как именно это реализовано.

Интерфейсы могут наследовать другие интерфейсы. Класс может наследовать интерфейс несколько раз посредством наследуемых базовых классов или интерфейсов. В этом случае класс может реализовать интерфейс только один раз, если он объявляется частью нового класса. Если унаследованный интерфейс не объявлен как часть нового класса, его реализация предоставляется базовым классом, объявившим его. Базовый класс может реализовать члены интерфейса посредством виртуальных членов. В этом случае класс, наследующий интерфейс, может изменить поведение наследования путем переопределения виртуальных членов. Дополнительные сведения о виртуальных членах см. в разделе Полиморфизм.

Интерфейс имеет следующие свойства.

  • Интерфейс подобен абстрактному базовому классу: любой неабстрактный тип, наследующий интерфейс, должен реализовать все его члены.

  • Невозможно создать экземпляр интерфейса напрямую.

  • Интерфейсы могут содержать методы, свойства, индексаторы и события в качестве членов.

  • Интерфейсы не содержат реализации методов.

  • Как классы, так и структуры способны наследовать от нескольких интерфейсов.

  • Интерфейс может быть унаследован от нескольких интерфейсов.


Классы и структуры.


1.8 Классы

Классы используются для определения новых типов данных. C# поддерживает только одиночное наследования. Класс может реализовывать различные интерфейсы. Членами класса могут быть константы, переменные, методы, свойства, индексаторы, события, операторы, конструкторы, деструкторы и также вложенные объявления типов. Каждый член класса имеет свою форму доступа. Форм всего пять:

- public такие члены доступны из любой части кода

- protected доступны только в производных классах

- internal доступны только в своем блоке

- protected internal доступны только производным классам данного модуля

- private доступны только из данного класса

1.9 Структуры

Структуры и классы очень похожи. Структуры могут реализовывать интерфейсы и включать в свой состав тоже что и классы. Но есть и серьезные отличия. Структуры больше подходят для использования по значению, нежели по указателю. Наследования для структур не поддерживается. Значения структур хранятся в стеке. Аккуратные программисты могут очень неплохо увеличить производительность программы, используя структуры.

Для примера: использование структуры вместо класса для Point может привести к сильному упрощению работы с памятью. Программа, представленная ниже, создает и инициализирует массив из 100 точек. При реализации Point классом мы получаем 101 объект - массив и 100 элементов.

Если же Point реализовать структурой, как в следующем примере:

то программа будет содержать только один объект - массив. Элементы Point будут расположены внутри массива. Хотя конечно подобное упрощение может и не сыграть большой роли. Использование структур вместо классов в некоторых случаях может сделать ваши программы объемнее и замедлить их выполнение, в связи с тем что передача структуры по значению происходит медленнее чем передача класса по указателю.
1   ...   18   19   20   21   22   23   24   25   ...   37


написать администратору сайта