рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Реализация интерфейсов

Реализация интерфейсов - раздел Информатика, Обзор Microsoft Visual Studio 2005 Итак, Если Интерфейс Определен, Один Или Несколько Классов Могут Его Реализо­...

Итак, если интерфейс определен, один или несколько классов могут его реализо­вать. Чтобы реализовать интерфейс, нужно указать его имя после имени класса по­добно тому, как при создании производного указывается базовый класс. Формат запи­си класса, который реализует интерфейс, таков:

class имя_класса : имя_интерфейса { // тело класса

}

Нетрудно догадаться, что имя реализуемого интерфейса задается с помощью эле­мента имя_интерфейса.

Если класс реализует интерфейс, он должен это сделать в полном объеме, т.е. реа­лизация интерфейса не может быть выполнена частично.

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

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

Рассмотрим пример реализации интерфейса ISeries, объявление которого приве­дено выше. Здесь создается класс с именем ByTwos, генерирующий ряд чисел, в кото­ром каждое следующее число больше предыдущего на два.

// Реализация интерфейса ISeries, class ByTwos : ISeries {

int start;

int val;

public ByTwos() { start = 0; val = 0;

}

public int getNext() {

val +=2; return val;

}

public void reset() { val = start;

}

public void setStart(int x) { start = x; val = start;

}

}

Как видите, класс ByTwos реализует все три метода, определенные интерфейсом ISeries. Иначе и быть не может, поскольку классу не разрешается создавать частич­ную реализацию интерфейса.

Рассмотрим пример, демонстрирующий использование класса ByTwos, Вот его код:

// Демонстрация использования интерфейса,

// реализованного классом ByTwos.

using System;

class SeriesDemo (

public static void MainO { ByTwos ob = new ByTwos();

for(int i=0; i < 5; i++)

Console.WriteLine("Следующее значение равно " + ob.getNext() ) ;

Console.WriteLine("nПереход в исходное состояние."); ob.reset();

for(int i-0; i < 5; i++)

Console.WriteLine("Следующее значение равно " +

Iob.getNext()) ; Console.WriteLine("n Начинаем с числа 100."); ob.setStart(100); for(int i=0; i < 5; 1++)

Console.WriteLine("Следующее значение равно " +' ob.getNext());

}

}

Чтобы скомпилировать программу SeriesDemo, необходимо включить в процесс компиляции файлы, которые содержат классы ISeries, ByTwos и SeriesDemo. Для создания выполняемой программы компилятор автоматически скомпилирует все три файла. Если эти файлы называются, например, ISeries, cs, ByTwos. cs и SeriesDemo.es, то программа скомпилируется посредством выполнения такой ко­мандной строки:

>csc SeriesDemo.cs ISeries.cs ByTwos.cs

Если вы используете интегрированную среду (IDE) Visual Studio, добавьте все эти три файла в свой С#-проект. Вполне допустимо также поместить их в один файл.

В классах, которые реализуют интерфейсы, можно определять дополнительные члены. Например, в представленную ниже версию класса ByTwos добавлен метод getPrevious (), который возвращает предыдущее значение ряда.

// Реализация интерфейса ISeries с дополнительно // определяемым методом getPrevious().

class ByTwos : ISeries {

int start;

int val;

int prev;

public ByTwos() {

start = 0;

val = 0;

prev = -2;

}

public int getNext(){

prev = val;

val +- 2;

return val;

}

public void reset() {

val = start;

prev = start - 2;

)

public void setStart(int x) { start = x; val - start;

Iprev = val - 2; // Метод, не объявленный в интерфейсе ISeries. public int getPrevious<) { return prev;

Обратите внимание на то, что добавление метода getPrevious () потребовало внесения изменений в реализацию методов, определенных интерфейсом iSeries. Но поскольку интерфейс для этих методов остается прежним, при изменении не разру­шается код, написанный ранее. В этом и заключается одно из достоинств использова­ния интерфейсов.

Возможно, вы будете несколько удивлены, узнав, что можно объявить ссылочную переменную интерфейсного типа. Другими словами, можно создать переменную-ссылку на интерфейс. Такая переменная может ссылаться на любой объект, который реализует ее интерфейс. При вызове метода для объекта посредством интерфейсной ссылки будет выполнена та версия указанного метода, которая реализована этим объ­ектом. Этот процесс аналогичен использованию ссылки на базовый класс для доступа к объекту производного класса.

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

// Демонстрация использования интерфейсных ссылок.

using System;

// Определение интерфейса, public interface ISeries {

int getNextO; // Возвращает следующее число ряда.

void reset О; // Выполняет перезапуск.

void setStart(int х); // Устанавливает начальное

// значение.

}

// Используем интерфейс ISeries для генерирования // последовательности четных чисел, class ByTwos : ISeries {

int start;

int val;

public ByTwosО {

start = 0; val = 0;

}

public int getWext{) {

val +=2; return val;

}

public void reset{) {

val = start;

}

public void setStart(int x) {

start = x; val = start;

}

}

// Используем интерфейс ISeries для построения

// ряда простых чисел,

class Primes : ISeries {

int start;

int val;

public Primes() {

start = 2; val = 2;

}

public int getNext() { int I, j; bool isprime;

val++;

for(i - val; i < 1000000; i++) { isprime = true;

for(j - 2; j < (i/j + 1); {

if<(i%j)--0) { isprime = false; break;

}

}

if(isprime) {

val = i; break;

}

}

return val;

}

public void reset() {

val = start;

}

public void setStart(int x) {

start = x;

val = start;

)

}

class SeriesDemo2 {

public static void Main() {

ByTwos twoOb - new ByTwos();

Primes primeOb = new Primes();

ISeries ob;

for(int i=0; i < 5; i++) {

ob = twoOb; Console.WriteLine(

"Следующее четное число равно

ob.getNext()) ; ob = primeOb; Console.WriteLine(

"Следующее простое число равно

ob.getNext());

Вот результаты выполнения этой программы:

(Следующее четное число равно 2

Следующее простое число равно 3

Следующее четное число равно А

Следующее простое число равно 5

Следующее четное число равно 6

Следующее простое число равно 7

Следующее четное число равно 8

Следующее простое число равно 11

Следующее четное число равно 10

Следующее простое число равно 13

В методе Main() объявляется переменная ob как ссылка на интерфейс iSeries. Это означает, что ее можно использовать для хранения ссылок на любой объект, ко­торый реализует интерфейс ISeries. В данном случае она служит для ссылки на объ­екты twoOb и primeOb, которые являются экземплярами классов ByTwos и Primes, соответственно, причем оба класса реализуют один и тот же интерфейс, ISeries.

Важно понимать, что интерфейсная ссылочная переменная "осведомлена" только о методах, объявленных "под сенью" ключевого слова interface. Следовательно, ин­терфейсную ссылочную переменную нельзя использовать для доступа к другим пере­менным или методам, которые может определить объект, реализующий этот интер­фейс.

 

– Конец работы –

Эта тема принадлежит разделу:

Обзор Microsoft Visual Studio 2005

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

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Реализация интерфейсов

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Обзор Microsoft Visual Studio 2005
Microsoft Visual Studio 2005 представляет собой полный набор инструментов для создания как настольных прикладных систем, так и корпоративных веб-приложений. Используя эффективные инструменты разраб

Отладка программы
Отладка программы - один из основных этапов составления конечного программного продукта, основанная на исправлении различных ошибок в частях кода, которые не дают продвигаться дальше в разработке.

Пошаговый режим
Пошаговый режим представляет собой процесс исполнения программы, при котором за один раз исполняется только одна инструкция. Для активации пошагового режима нажмите клавишу F10 или выберит

Точки останова
Пошаговый режим весьма полезен, но в больших программах его использование может быть очень утомительным, особенно если отлаживаемый участок кода расположен глубоко в программе. Вместо клавиш F10 и

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

Условные точки останова
  Очень часто, например, при отладке циклов и других сложных конструкиций бывает удобно наложить условие на точки останова. Для установки условия в окне New Breakpoint существует кноп

Просмотр переменных
Во время отладки обычно необходимо видеть значения переменных программы. Одна из возможностей просмотра переменных – это всплывающая подсказка, которая появляется при наведении курсора мыши на назв

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

Разработка оконных приложений
Под оконным приложением понимается приложение в Windows. Для разработки таких приложений в Visual Studio необходимо при создании нового проекта указать тип проекта Windows Application. В результате

Размещение компонентов на форме. Свойства компонента.
Компонент может быть размещен путем перетаскивания его с панели Toolbox на форму. Приведем пример размещения компонента Button на форме, результат представлен на рисунке 4.  

Компонент CheckBox
Компонент CheckBox предназначен для размещения на форме элемента с возможностью выбора, который представлен нп рисунке 7.  

Компонент CheckBoxListBox
  Компонент CheckBoxListBox предназначен для размещения группы элементов CheckBox, объединенной общим контейнером. Для включения элементов в контейнер CheckBoxListBox необходимо перей

Компонент TextBox
Этот элемент управления является основным, предназначенным для ввода пользователем текстовых данных. Использовать TextBox можно в однострочном или многострочном режиме. Однако данный элемент управл

Компонент RichTextBox
Данный элемент управления дает возможность пользователю вводить и обрабатывать большие объемы информации (более 64 килобайт). Кроме того, RichTextBox позволяет редактировать цвет текста, шрифт, доб

Компонент ListBox
ListBox – простейший вариант пролистываемого списка. Он позволяет выбирать один или несколько хранящихся в списке элементов. Кроме того, ListBox имеет возможность отображать данные в нескольких кол

Компонент ComboBox
  Этот вариант списка удобен тем, что не занимает много пространства на форме. Постоянно на форме представлено только одно значение этого списка. При необходимости пользователь может

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

Компонент LinkLabel
  LinkLabel представляет собой гиперссылку, которыми наполнен Интернет. Разработчики Visual Studio представили этот элемент управления как разновидность метки (элемента управления Lab

Компонент ProgressBar
Чаще всего ProgressBar используют для отображения степени завершенности той или иной задачи. Вы сталкивались с индикатором прогресса, когда устанавливали на свой компьютер Visual Studio. О

Указатели и управление памятью
В языке C++ работа с указателями занимает одно из центральных мест. Нормальный стиль программирования на С# предполагает написание безопасного кода, а это значит — никаких указателей, ника

ТИПЫ ДАННЫХ
  Типы данных принято разделять на простые и сложные в зависимости от того, как устроены их данные. У простых (скалярных) типов возможные значения данных едины и неделимы. Сложные тип

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

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

Перегрузка операций
  Под перегрузкой операции понимается существование нескольких реализаций одной и той же операции. Большинство операций языка C# перегружены - одна и та же операция может применяться

Циклы While
  Цикл while (выражение) является универсальным видом цикла, включаемым во все языки программирования. Тело цикла выполняется до тех пор, пока остается истинным выражение while. В язы

Цикл foreach
  Новым видом цикла, не унаследованным от С++, является цикл foreach, удобный при работе с массивами, коллекциями и другими подобными контейнерами данных. Его синтаксис: &nbs

Поля и свойства
Свойство отражает ту или иную черту (аспект) класса. Часто, но не всегда, это просто значение поля с почти идентичным именем. Свойство защищает поле и контролирует доступ к нему извне. Такая методи

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

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

Ключевое слово this
  При вызове метода ему автоматически передается неявный аргумент, который является ссылкой на вызываемый объект (т.е. на объект, с данными которого будет работать этот метод). Эта сс

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

Наследование
Наследование — один из трех фундаментальных принципов объектно-ориентиро­ванного программирования, поскольку именно благодаря ему возможно созда­ние иерархических классификаций. Используя наследова

Интерфейсы
В объектно-ориентированном программировании иногда требуется определить, что класс должен делать, а не как он будет это делать. Вы уже видели такой подход на примере абстрактного метода. Абстрактны

Интерфейсные свойства
Как и методы, свойства определяются в интерфейсе без тела. Ниже приведен фор­мат спецификации свойства. // Интерфейсное свойство тип имя{ get; set; } Св

Интерфейсные индексаторы
В интерфейсе можно определить и индексатор. Объявление индексатора в интер­фейсе имеет следующий формат записи: // Интерфейсный индексатор тип_элемента this[int индекс]{ get;

Массивы
  При работе программы с набором объектов одинакового типа во многих случаях удобно образовать из этих объектов структуру данных, называемую массивом. (array) Каждый элемент

Одномерные массивы
Одномерны массив возможно представить в виде последовательности ячеек, каждая из которых имеет свой номер. Нумерация массива начинается с 0. Задание значений элементам массива может быть с

Двумерные массивы
  Двумерные массивы можно представить в виде матрицы, в узлах которой хранятся объекты. Для создания двумерного массива используется конструкция следующего вида: int[,] TwoDi

Массивы массивов
  В языке С# допускается создавать массивы массивов, называемые также несимметричными массивами или ступенчатыми.

Обработка исключительных ситуаций
Рассмотрим примеры возникновения компьютерных ошибок и ситуации, при которых они возникают. Простейшим примером ошибки является деление на 0 и выход за границы массива. Рассмотрим

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

Проверка кодов возврата функций и методов
Рассмотрим случай, когда мы вызываем метод обработки информации, выполняющего деление первого своего параметра на второй.   using System; namespace DivByZero

Блоки try-catch
Для того чтобы организовать в своей программе С# обработку ошибок с использова­нием исключений, нужно применить блоки, созданные при помощи ключевых слов try, catch и finally. Создание исключения (

Применение блока finally
В некоторых случаях при обработке исключений с применением блоков try и catch имеет смысл дополнительно предусмотреть блок finally. Этот блок выполняется всегда, вне зависимости от того, произошло

Массивы как коллекции
Коллекции – это специальный вид классов, предназначенных для хранения и управления многими объектами. На практике довольно часто возникают случаи, когда объект задается многократно. В подо

Коллекция ArrayList
  Проблема статического создания массива решается при помощи использования другого класа данных языка С#. В пространстве имен System.Collections имеется встроенный класс с названием A

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги