T GetNext();// возвратить следующее по порядку число
void Reset(); // генерировать ряд последовательных чисел с самого начала void SetStart(T v); // задать начальное значение
}
//Реализовать интерфейс ISeries, class ByTwos
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 +
}
static void Main() {
// Продемонстрировать генерирование // последовательного ряда значений типа int. ByTwos
for(int i=0; i < 5; i++)
Console.Write(intBT.GetNext() + " ") ;
Console.WriteLine();
// Продемонстрировать генерирование // последовательного ряда значений типа double. ByTwos
new ByTwos
for(int i=0; i < 5; i++)
Console.Write(dblBT.GetNext() + " ");
Console.WriteLine();
// Продемонстрировать генерирование последовательного ряда // значений координат объекта типа ThreeD.
ByTwos
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.