Set; // установить следующее число
}
}
// Реализовать интерфейс ISeries,
class ByTwos : ISeries { int val;
public ByTwos() {
val = 0;
}
// Получить или установить значение,
public int Next {
get {
val += 2;
return val;
}
set {
val = value;
}
}
}
// Продемонстрировать применение интерфейсного свойства,
class SeriesDemo3 {
static void Main() {
ByTwos ob = new ByTwos();
// Получить доступ к последовательному ряду
Чисел с помощью свойства,
for(int i=0; i < 5; i++)
Console.WriteLine("Следующее число равно " + ob.Next);
Console.WriteLine("\nНачать с числа 21");
ob.Next = 21;
for (int i=0; i <5; i++)
Console.WriteLine("Следующее число равно " + ob.Next);
}
}
При выполнении этого кода получается следующий результат.
Следующее число равно 2
Следующее число равно 4
Следующее число равно 6
Следующее число равно 8
Следующее число равно 10
Начать с числа 21
Следующее число равно 23
Следующее число равно 25
Следующее число равно 27
С ледующее число равно 29
Следующее число равно 31
Интерфейсные индексаторы
В интерфейсе можно также указывать индексаторы. Ниже приведена общая форма объявления интерфейсного индексатора.
// Интерфейсный индексатор тип_элемента this[int индекс]{ get; set;
}
Как и прежде, в объявлении интерфейсных индексаторов, доступных только для чтения или только для записи, должен присутствовать единственный аксессор: get или set соответственно.
Ниже в качестве примера приведен еще один вариант реализации интерфейса ISeries, в котором добавлен индексатор только для чтения, возвращающий i-й элемент числового ряда.
|
|
//Добавить индексатор в интерфейс
using System;
// Добавить индексатор в интерфейс, using System;
public interface ISeries {
// Интерфейсное свойство,
int Next {
get; // возвратить следующее по порядку число
Set; // установить следующее число
}
Интерфейсный индексатор,
int this[int index] {
Get; // возвратить указанное в ряду число
}
}
// Реализовать интерфейс ISeries,
class ByTwos : ISeries {
int val;
public ByTwos() {
val = 0;
}
// Получить или установить значение с помощью свойства,
public int Next {
get {
val += 2;
return val;
}
set {
val = value;
}
}
// Получить значение по индексу,
public int this[int index] {
get {
val = 0;
for(int i=0; i < index; i++) val += 2;
return val;
}
}
}
// Продемонстрировать применение интерфейсного индексатора,
class SeriesDemo4 {
static void Main() {
ByTwos ob = new ByTwos();
// Получить доступ к последовательному
Ряду чисел с помощью свойства,
for (int i=0; i < 5; i++)
Console.WriteLine("Следующее число равно " + ob.Next);
Console.WriteLine("\nНачать с числа 21");
ob.Next = 21;
for (int i=0; i < 5; i++)
Console.WriteLine("Следующее число равно " + ob.Next);
Console.WriteLine("\nСбросить в 0");
ob.Next = 0;
|
|
// Получить доступ к последовательному
//ряду чисел с помощью индексатора
for (int i=0; i < 5; i++)
Console.WriteLine("Следующее число равно " + ob[i]);
}
}
Вот к какому результату приводит выполнение этого кода.
Следующее число равно 2
Следующее число равно 4
Следующее число равно 6
Следующее число равно 8
Следующее число равно 10
Начать с числа 21
Следующее число равно 23
Следующее число равно 25
Следующее число равно 27
Следующее число равно 29
Следующее число равно 31
Сбросить в 0
Следующее число равно 0
Следующее число равно 2
Следующее число равно 4
Следующее число равно 6
Следующёе число равно 8
Наследование интерфейсов
Один интерфейс может наследовать другой. Синтаксис наследования интерфейсов такой же, как и у классов. Когда в классе реализуется один интерфейс, наследующий другой, в нем должны быть реализованы все члены, определенные в цепочке наследования интерфейсов, как в приведенном ниже примере.
// Пример наследования интерфейсов,
using System;
public interface IA {
void Meth1();
void Meth2() ;
}
/ / В базовый интерфейс включены методы Meth1() и Meth2(),
// а в производный интерфейс добавлен еще один метод — Meth3().
|
|
public interface IB : IA {
void Meth3();
}
// В этом классе должны быть реализованы
//все методы интерфейсов IA и IB.
class MyClass : IB {
public void Meth1() {
Console.WriteLine("Реализовать метод Meth1().");
}
public void Meth2() {
Console.WriteLine("Реализовать метод Meth2().");
}
public void Meth3() {
Console.WriteLine("Реализовать метод Meth3().");
}
}
class IFExtend {
static void Main() {
MyClass ob = new MyClass();
ob.Meth1();
ob.Meth2();
ob.Meth3();
}
}
Ради интереса попробуйте удалить реализацию метода Meth1() из класса MyClass. Это приведет к ошибке во время компиляции. Как пояснялось ранее, в любом классе, реализующем интерфейс, должны быть реализованы все методы, определенные в этом интерфейсе, в том числе и те, что наследуются из других интерфейсов.
Дата добавления: 2019-02-12; просмотров: 262; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!