Пример опредиления интерфейса и работы с ним

Рассмотрим интерфейс IDemo и его реализацию для классов DemoPoint и DemoLine //определение интерфейса

 

 

interface IDemo

{

void Show(); //объявление метода

double Dlina(); //объявление метода

int X {get;} //объявление свойства, доступного только для чтения

int this [int i]{get;set;} //объявление индексатора, доступного для чтения-записи

}

//класс DemoPoint наследует интерфейс IDemo

class DemoPoint:IDemo

{

protected int x;

protected int y;

public DemoPoint ( int x, int y) { this.x=x; this.y=y; }

public void Show() //реализация метода, объявленного в интерфейсе

{ Console.WriteLine("точка на плоскости: ({0}, {1})",x, y); }

public double Dlina() //реализация метода, объявленного в интерфейсе

{ return Math.Sqrt(x*x+y*y); }

public int X //реализация свойства, объявленного в интерфейсе

{ get { return x; } }

public int this [int i] //реализация индексатора, объявленного в интерфейсе

{

get

{

if (i==0) return x;

else if (i==1) return y;

else throw new Exception("недопустимое значение индекса");

}

set

{

if (i==0) x=value;

else if (i==1) y=value;

else throw new Exception ("недопустимое значение индекса");

}

}

}

//класс DemoShape наследует класс DemoPoint и интерфейс IDemo

class DemoShape : DemoPoint, IDemo

{

protected int z;

public DemoShape(int x, int y, int z):base(x, y)

{ this.z=z; }

// реализация метода, объявленного в интерфейсе, с сокрытием одноименного метода из базового класса

public new void Show()

{

Console.WriteLine("точка в пространстве: ({0}, {1}, {2})", x, y, z);

}

// реализация метода, объявленного в интерфейсе, с сокрытием одноименного метода из базового класса

public new double Dlina()

{ return Math.Sqrt(x*x+y*y+z*z); }

// реализация индексатора, объявленного в интерфейсе, с сокрытием одноименного индексатора из базового класса

public new int this [int i]

{

get

{

if (i==0) return x;

else if (i==1) return y;

else if (i==2) return z;

else throw new Exception ("недопустимое значение индекса");

}

set

{

if (i==0) x=value;

else if (i==1) y=value;

else if (i==2) z=value;

else throw new Exception ("недопустимое значение индекса");

}

}

}

class Program

{

static void Main()

{

//создание массива интерфейсных ссылок

IDemo []a =new IDemo[4];

 

//заполнение массива

a[0]=new DemoPoint(0,1);

a[1]=new DemoPoint(-3, 0);

a[2]=new DemoShape(3,4,0);

a[3]= new DemoShape(0,5, 6);

 

//просмотр массива

foreach (IDemo x in a)

{

x.Show();

Console.WriteLine("Dlina={0:f2}",x.Dlina());

Console.WriteLine("x="+x.X);

x[1]+=x[0];

Console.Write("новые координаты - ");

x.Show();

Console.WriteLine();

}

}

}

Обратите внимание, что в интерфейсе IDemo было объявлено свойство Х, доступное только для чтения. Наследуя интерфейс IDemo, класс DemoPoint определил реализацию данного свойства. Класс DemoShape, наследуя класс DemoPoint и IDemo, не предложил собственной реализации свойства Х, поэтому при обращении к объекту типа DemoShape вызывается реализация данного свойства, определенная в базовом классе.

Контрольные вопросы:

1.Что понимается под термином «интерфейс»?

2.Чем отличается синтаксис интерфейса от синтаксиса абстрактного класса?

3.Какие объекты языка C# могут быть членами интерфейсов?








Дата добавления: 2015-10-26; просмотров: 799;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.