Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


Download 2.46 Mb.
bet48/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   44   45   46   47   48   49   50   51   ...   91
Bog'liq
Язык программирования 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:
1   ...   44   45   46   47   48   49   50   51   ...   91




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling