КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Строго фиксированное количество элементов.
Пример использования семейства System.Collections.ArrayList Класс System.Collections.ArrayList — один из классов в пространстве имен System.Collections — тоже реализует интерфейсы IEnumerable, ICollection и IList. В то время как массивы обладают фиксированным размером (нет возможности добавлять или исключать элементы), этот класс может использоваться для представления списков элементов переменной длины. Чтобы получить представление о том, какими возможностями обладают такие усложненные семейства, рассмотрим пример, в котором наряду с классом System.Collections.ArrayList будет использоваться и обыкновенный массив. using System; using System.Collections; … public abstract class Animal //абстрактный класс Животное { protected string name; public string Name { get {return name;} set {name = value;} } public Animal() {name = "Животное без имени";} public Animal(string newName) {name = newName;} public void Feed() {Console.WriteLine("{0} кушает ", name);} }
public class Cow: Animal //класс Корова, производный от абстрактного { public void Milk() {Console.WriteLine("{0} дает молоко", name);} public Cow(string newName): base(newName) //конструктор вызывает базовый конструктор {} }
public class Chicken: Animal //класс Курица, производный от абстрактного { public void LayEgg() { Console.WriteLine("{0} несет яйца", name); } public Chicken(string newName): base(newName) {} } class Class { static void Main(string[] args) { Console.WriteLine("Создание нового массива животных в виде стандартного Array: "); Animal[] animalArray = new Animal[2]; Cow myCow1 = new Cow("Буренка1"); //2 способа задания элементов массива //1 способ - путем присваивания уже существующего объекта класса Cow animalArray[0] = myCow1; //2 способ – через создание нового объекта класса Chicken animalArray[1] = new Chicken("Курица1"); Основное отличие между этими способами заключается в том, что в первом случае мы получаем ссылку на объект, находящийся в массиве. В семействе ArrayList не существует никаких элементов, даже ссылающихся на null. Класс System.Array реализует интерфейс IEnumerable, а единственный метод этого интерфейса - GetEnumerator(), позволяет проходить в цикле по всем элементам семейства. foreach (Animal myAnimal in animalArray) //цикл перебора по 1 элементу в массиве { Console.WriteLine(" Новый {0} элемент добавлен в массив," + "имя = {1}", myAnimal.ToString(), myAnimal.Name); }
//использование свойства Length, стандартного для класса System.Array Console.WriteLine("Массив содержит {0} элементов",animalArray.Length); //метод Feed() есть у всех производных от Animal animalArray[0].Feed(); //метод LayEgg() есть только у класса Chicken, поэтому здесь явное приведение типов ((Chicken)animalArray[1]).LayEgg(); //Демонстрация работы с семейством - классом ArrayList Console.WriteLine("Использование класса ArrayList"); ArrayList animalArrayList = new ArrayList(); Cow myCow2=new Cow("Буренка2"); //2 способа задания элементов массива // КОЛИЧЕСТВО ЭЛЕМЕНТОВ НЕ ФИКСИРУЕТСЯ, использовать метод Add() animalArrayList. Add (myCow2); animalArrayList. Add (new Chicken ("Курица 2")); foreach (Animal myAnimal in animalArrayList) { Console.WriteLine(" Новый {0} элемент добавлен в ArrayList," + " имя = {1}", myAnimal.ToString(), myAnimal.Name); } //использование свойства Count для класса ArrayList Console.WriteLine("Массив содержит {0} элементов",animalArrayList.Count); Семейства — независимо от того, являются ли они массивами или более сложными семействами — должны предусматривать обеспечение доступа к принадлежащим им элементам. Простые массивы строго типизированы, т. е. они обеспечивают непосредственный доступ к типу своих элементов. Семейство ArrayList — это семейство объектов класса System.Object. Это значит, что необходимо выполнить приведение типа для всех его элементов: //так как ArrayList содержит разные экземпляры классов, то для вызова соответcтвующих //методов необходимо применить соответствующие преобразования ((Animal)animalArrayList[0]).Feed(); ((Chicken)animalArrayList[1]).LayEgg(); Console.WriteLine("Демонстрация действий с ArrayList:"); //метод RemoveAt() удаляет заданный элемент (по индексу) из списка animalArrayList.RemoveAt(0); //единственным элементом, оставшимся в семействе, является объект класса chicken, //доступ к которому осуществляется следующим образом: ((Animal)animalArrayList[0]).Feed(); Выполнение любых операций над элементами объекта ArrayList, в результате которых в этом массиве останется N элементов, будет производиться таким образом, что этим элементам будут соответствовать индексы в диапазоне от 0 до N-I. Так, например, удаление элемента с номером 0 приводит к тому, что все остальные элементы сдвигаются в массиве на одну позицию, поэтому доступ к объекту класса Chicken осуществляется с индексом 0, а не 1. А поскольку теперь в массиве не существует элемента с индексом 1 (с самого начала было всего два элемента), то при попытке выполнить следующий код будет сгенерирована исключительная ситуация: ((Animal)animalArrayList[1]).Feed(); //метод AddRange() добавляет в список несколько элементов – в данном случае - массив animalArrayList.AddRange(animalArray); ((Chicken)animalArrayList[2]).LayEgg(); //использование свойства IndexOf для класса ArrayList Console.WriteLine("Животное {0} с индексом {1}", myCow1.Name, animalArrayList.IndexOf(myCow1)); myCow1.Name="Новая Буренка1"; //использование свойства Name, определенного в классе Animal Console.WriteLine("Животное (0)",((Animal)animalArrayList[1]).Name); Console.ReadLine(); }}} В этом примере создается два семейства объектов, причем первое — с использованием класса System.Array (т. е. обыкновенный массив), а второе — с использованием класса System.ArrayList. Оба они являются семействами объектов класса Animal. Класс Animal является абстрактным классом, следовательно, создание экземпляров этого класса является недопустимым; однако за счет использования полиморфизма имеется возможность включить в состав семейства экземпляры класса Cow и класса Chicken, которые являются производными от класса Animal. Эти массивы создаются в методе Main(), после чего над ними производятся различные манипуляции, показывающие их характеристики и возможности. Некоторые из продемонстрированных операций применимы как к семейству Array, так и к семейству ArrayList, хотя и имеются незначительные отличия в синтаксисе. Однако есть и такие операции, выполнение которых оказывается возможным только с более сложным типом ArrayList.
Дата добавления: 2014-01-20; Просмотров: 452; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |