// Использовать интерфейс ISeries для реализации процесса // генерирования последовательного ряда чисел, в котором каждое // последующее число на два больше предыдущего, class ByTwos : ISeries { int start; int val;
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 GetNextO { int i, j; bool isprime;
val++;
for(i = val; i < 1000000; i++) {
isprime = true; for (j = 2; j <= i/j; j++) {
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 { 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 Следующее четное число равно 4 Следующее простое число равно- 5 Следующее четное число равно 6 Следующее простое число равно 7 Следующее четное число равно 8 Следующее простое число равно 11 Следующее четное число равно 10 Следующее простое число равно 13
В методеMain переменнаяobобъявляется для ссылки на интерфейсISeries.Это означает, что в ней могут храниться ссылки на объект любого класса, реализующего интерфейсISeries.В данном случае она служит для ссылки на объектыtwoObиprimeObклассовByTwosиPrimesсоответственно, в которых реализован интерфейсISeries.
И еще одно замечание: переменной ссылки на интерфейс доступны только методы, объявленные в ее интерфейсе. Поэтому интерфейсную ссылку нельзя использовать для доступа к любым другим переменным и методам, которые не поддерживаются объектом класса, реализующего данный интерфейс.
Интерфейсные свойства
Аналогично методам, свойства указываются в интерфейсе вообще без тела. Ниже приведена общая форма объявления интерфейсного свойства.
// Интерфейсное свойство
}
Очевидно, что в определении интерфейсных свойств, доступных только для чтения или только для записи, должен присутствовать единственный аксессор:getилиsetсоответственно.