T GetNext();// возвратить следующее по порядку число

void Reset(); // генерировать ряд последовательных чисел с самого начала void SetStart(T v); // задать начальное значение

}

//Реализовать интерфейс ISeries, class ByTwos : ISeries {

T start;

T val;

// Этот делегат определяет форму метода, вызываемого для генерирования // очередного элемента в ряду последовательных значений, public delegate Т IncByTwo(Т v);

// Этой ссылке на делегат будет присвоен метод,

// передаваемый конструктору класса ByTwos.

IncByTwo incr;

public ByTwos(IncByTwo incrMeth) { start = default(T); val = default(T); incr = incrMeth;

}

public T GetNext() { val = incr(val); return val;

}

public void Reset()    {

val = start;

}

public void SetStart(T v) { start = v; val = start;

}

}

class ThreeD {

public int x/ч у, z;

public ThreeD(int a, int b, int c) { x = a;

У = b;

z = c;

}

}

class GenlntfDemo {

// Определить метод увеличения на два каждого // последующего значения типа int. static int IntPlusTwo(int v) { return v + 2;

}

// Определить метод увеличения на два каждого // последующего значения типа double, static double DoublePlusTwo(double v) { return v + 2.0;

}

// Определить метод увеличения на два каждого // последующего значения координат объекта типа ThreeD. static ThreeD ThreeDPlusTwo(ThreeD v) { if(v==null) return new ThreeD(0, 0, 0) ; else return new ThreeD(v.x + 2, v.y +2,v.z + 2);

}

static void Main() {

// Продемонстрировать генерирование // последовательного ряда значений типа int. ByTwos intBT = new ByTwos(IntPlusTwo);

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

Console.Write(intBT.GetNext() + " ") ;

Console.WriteLine();

// Продемонстрировать генерирование // последовательного ряда значений типа double. ByTwos dblBT =

new ByTwos(DoublePlusTwo); dblBT.SetStart(11.4);

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

Console.Write(dblBT.GetNext() + " ");

Console.WriteLine();

// Продемонстрировать генерирование последовательного ряда // значений координат объекта типа ThreeD.

ByTwos ThrDBT = new ByTwos(ThreeDPlusTwo);

ThreeD coord;

coord.z + " ");

}

Console.WriteLine();

}

}

Этот код выдает следующий результат.

2 4 6 8 10

13.4 15.4 17.4 19.4 21.4 0, 0, 0 2,2,2 4, 4, 4 6, 6, 6 8, 8,8

В данном примере кода имеется ряд любопытных моментов. Прежде всего обратите внимание на объявление интерфейсаISeriesв следующей строке кода.

public interface ISeries {

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

А теперь обратите внимание на следующее объявление классаByTwos,реализующего интерфейсI series.

Перейти на страницу:

Похожие книги