Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч
Download 2.46 Mb.
|
Язык программирования C#
10.3. Явная реализация интерфейса
При реализации члена интерфейса можно дополнительно квалифицировать его имя с использованием имени интерфейса, т.е. пред именем члена поставить имя интерфейса, от которого этот член наследуется, и точку. В этом случае говорят, что член интерфейса реализуется явным образом, или имеет место его явная реализация. При явной реализации членов интерфейса, они должны иметь спецификатор доступа private. Класс или структура, реализующая интерфейс, может реализовать его дважды: один раз явно, второй раз неявно. Покажем теперь использование явной реализации. Определим сначала небольшой интерфейс ISeries. interface ISeries { double Next(); double Prev(); double this[int index] { get; } } Лист. 1.8 Приведенный интерфейс содержит в себе методы и индексатор, необходимые для реализации некоторого пронумерованного списка или ряда. Методы Next и Prev используются для доступа к следующему и предыдущему члену ряда соответственно. Индексатор используется для доступа к члену ряда по его номеру. Теперь определим класс, явно реализующий интерфейс ISeries. class RandomSeries : ISeries { double[] Numbers; int Position; double ISeries.Next() { if (Position < Numbers.Length) { return Numbers[++Position]; } else { Position = 0; return Numbers[Position]; } } double ISeries.Prev() { if (Position >= 0) { return Numbers[--Position]; } else { Position = Numbers.Length; return Numbers[Position]; } } double ISeries.this[int index] { get { return Numbers[Position]; } } public RandomSeries(int Amount) { Numbers = new double[Amount]; Random rnd = new Random(DateTime.Now.Millisecond); for (int i = 0; i < Amount; i++) Numbers[i] = rnd.Next(); } } Лист. 1.9 Листинг показывает, как явно реализовать члены интерфейса. При явной реализации имя каждого унаследованного члена пишется полностью вместе с именем интерфейса. Явно реализованные члены интерфейса можно использовать только при явном приведении объекта класса или структуры, реализующей интерфейс, к этому интерфейсу. static void Main(string[] args) { RandomSeries aRandomSeries = new RandomSeries(10); ISeries Series = (ISeries)aRandomSeries; Console.WriteLine("5-ый член: " + Series[5]); } Лист. 1.10 В этом примере создается объект класса RandomSeries aRandomSeries, а за тем этот объект явно приводится к интерфейсу ISeries и присваивается переменной Series типа ISeries. А уже через эту переменную идет доступ к закрытым явно реализованным членам класса. Вывод у этой программы каждый раз разный, но общий его вид такой: 5-ый член: 1824833231 Вывод 1.2 При передаче класса, явно реализующего интерфейс, в качестве параметра методу, ожидающему интерфейс, преобразование объекта к интерфейсу происходит автоматически. static void ShowAll(ISeries Series) { for (int i = 0; i < 10; i++) Console.WriteLine(Series.Next()); } static void Main(string[] args) { RandomSeries aRandomSeries = new RandomSeries(10); ShowAll(aRandomSeries); } Вывод у этой программы каждый раз разный, но общий его вид такой: 1093634978 970037455 1170176548 345419891 1637776394 1659051156 2078719476 689385856 1810592687 1896785571 Вывод 1.3 Download 2.46 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling