Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 семестр / Учебники / Все лекции С# / Все лекции С# / Лекции C# for print fineprint.docx
Скачиваний:
325
Добавлен:
24.02.2016
Размер:
523.48 Кб
Скачать

Void Draw(); //простой метод вывода имени монстра

Int Attack(int a); //реализация атаки с заданной силой

Void Die(); // метод вывода на экран сообщения о смерти монстра

Int Power { get; } //свойство, вычисляющее силу монстра

}

class Monster : IAction

{

public Monster()

{

this.health = 100;

this.ammo = 100;

this.name = "Noname";

}

public Monster(string name)

: this()

{

this.name = name;

}

public Monster(int health, int ammo, string name)

{

this.health = health;

this.ammo = ammo;

this.name = name;

}

public int Health

{

get

{

return health;

}

set

{

if (value > 0) health = value;

else health = 0;

}

}

public int Ammo

{

get

{

return ammo;

}

set

{

if (value > 0) ammo = value;

else ammo = 0;

}

}

public string Name

{

get

{

return name;

}

}

public void Passport()

{

Console.WriteLine("Monster {0} \t health ={1} ammo={2}", name, health, ammo);

}

//ДАЛЕЕ РЕАЛИЗУЮТСЯ ВСЕ МЕТОДЫ ИНТЕРФЕЙСА

public void Draw()

{ Console.WriteLine("Здесь был монстр " + name); }

public int Attack(int a)

{

ammo -= a;

if (ammo > 0) Console.WriteLine("ба-бах!");

else ammo = 0;

return ammo;

}

public void Die()

{ Console.WriteLine("Монстр " + name + "умер"); health = 0; }

public int Power

{

get { return ammo * health; }

}

string name;

int health, ammo;

}

class Program

{

static void Main(string[] args)

{

Monster Вася = new Monster(50, 50, "Вася как класс ");

Вася.Draw();

IAction IВася = new Monster(10, 10, "Вася как интерфейс ");

IВася.Draw();

Вася.Passport();

((Monster)IВася).Passport();

IВася.Attack(10);

Вася.Attack(20);

Console.WriteLine("У монстра "+ Вася.Name+ "сила равна "+Convert.ToString (((IAction)Вася).Power));

Console.WriteLine("У монстра " + ((Monster)IВася).Name + "сила равна " + Convert.ToString(IВася.Power));

if (Вася.Ammo <= 0) Вася.Die();

if (((Monster)IВася).Ammo <= 0) IВася.Die();

Console.ReadLine();

}

}

}

Лекция 17. Семейства. Индексаторы

В предыдущем семестре рассматривался особый тип - массивы для создания таких типов переменных, в которых содержится несколько объектов или значений. У массивов, однако, имеются определенные ограничения. Наиболее существенным из них является то, что после создания массива его размеры должны оставаться неизменными, поэтомудописывать новые элементы в конец уже существующего массива нельзя— требуется создавать новый массив. Методы ООП позволяют создавать классы, которые выполняют существенную часть этих манипуляций внутренним образом, упрощая тем самым код, в котором используются списки элементов или массивы.

Массивы в С# реализованы как экземпляры класса System.Arrayи представляют собой один из тех типов, которые известны под названиемклассов семейств.

Семейства — это объекты, в которых могут содержаться массивы других объектов и которые обладают функциональными возможностями для организации доступа к ним.

Классы семейств используются для работы со списками объектов и по сравнению с обычными массивами обладают некоторыми дополнительными функциональными возможностями. Эти возможности возникают за счет реализации интерфейсовиз пространства имен System.Сollections, что позволяет стандартизировать синтаксис семейств. В пространстве имен содержатся также и некоторые другие интересные вещи, например,классы, которые реализуют интерфейсыотличными от класса System.Array способами.

Функциональные возможности семейств такие как доступ к членам семейств с использованием синтаксиса [индекс], реализуются посредством интерфейсов. У программистов имеется возможность создавать свои собственные классы семейств. Такие классы могут соответствовать объектам, с которыми их планируется использовать (т. е. тем объектам, из которых планируется создавать семейство). Одно из преимуществ такого подхода заключается в том, что создаваемые классы семейств могут бытьстрого типизированы. Это означает, что при извлечении элементов из семейства нетребуется приводить их типы к требуемому типу.

В пространстве имен System.Collections существуютинтерфейсы, которые обеспечивают выполнение базовых функциональных возможностей семейств:

Интерфейс IEnumerable - позволяет просматривать элементы семейств в цикле.

Интерфейс ICollection - позволяет получать общее число элементов в семействе, а также копировать элементы семейства в обычный массив.

Интерфейс IList - предоставляет список элементов семейства и доступ к этим элементам, а также некоторые другие базовые возможности, имеющие отношение к работе со списками элементов.

Интерфейс IDictionary аналогичен интерфейсу IList, но предоставляет список элементов, доступ к которым осуществляется не с помощью индекса, а посредством некоторого ключевого значения.

Класс System.Array наследуется от IList, ICollection и IEnumerable, однако он не поддерживает некоторые наиболее мощные возможности интерфейса IList и представляет список элементов только фиксированной длины.