Как правильно писать тесты 46 Цикл разработки 46 Структура проекта с тестами 51 Утверждения (Asserts) 52 Утверждения в форме ограничений 54 Категории 56
Вид материала | Тесты |
СодержаниеПроблемы создания объектных образов и строго типизованные коллекции Пространство имен System.Collections.Generic Обобщенный класс |
- Некорректные задания, 1276.79kb.
- К техническому регламенту, 835.7kb.
- Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке разработки, 494.44kb.
- Постановлением Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке, 652.85kb.
- Постановлением Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке, 623.18kb.
- Правительства Российской Федерации от 11. 11. 2005 N 679 о порядке разработки и утверждения, 533.6kb.
- Постановления Правительства Российской Федерации от 11. 11. 2005 n 679 о порядке разработки, 613.63kb.
- Об утверждении требований к схемам теплоснабжения, порядку их разработки и утверждения, 450.79kb.
- Рабочая программа учебной дисциплины. Общие требования, порядок разработки, согласования, 414.77kb.
- Постановлением Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке, 1924.26kb.
Проблемы создания объектных образов и строго типизованные коллекции
Строго типизованные коллекции можно найти в библиотеках базовых классов .NET, и это очень полезные программные конструкции. Однако эти пользовательские контейнеры мало помогают в решении проблем создания объектных образов. Даже если вы создадите пользовательскую коллекцию с именем IntCollection, предназначенную для работы только с типами данных System.Int32, вам придется создать объект некоторого типа для хранения самих данных (System.Array, System.Collections.ArrayList и т.п.).
public class IntCollection : IEnumerable
{
private ArrayList arInts = new ArrayList();
public IntCollection() { }
// Восстановление значения для вызывающей стороны.
public int GetInt(int pos) { return (int)arInts[pos]; }
// Операция создания объектного образа!
public void AddInt(int i)
{ arInts.Add(i); }
public void ClearInts()
{ arInts.Clear(); }
public int Count
{ get { return arInts.Count; } }
IEnumerator IEnumerable.GetEnumerator()
{ return arInts.GetEnumerator(); }
}
Вне зависимости от того, какой тип вы выберете для хранения целых чисел (System.Array, System.Collections.ArrayList и т.п.), вы не сможете избавиться от проблемы .NET 1.1, связанной с созданием объектных образов. Нетрудно догадаться, что здесь снова на помощь приходят обобщения. В следующем фрагменте программного кода тип System.Collections.Generic.List<> используется для создания контейнера целых чисел, не имеющего проблем создания объектных образов и восстановления значений при вставке и получении типов характеризуемых значений.
static void Main(string[] args)
{
// Без создания объектного образа!
List
myInts.Add(5);
// Без восстановления значения!
int i = myInts[0];
}
Пространство имен System.Collections.Generic
Обобщенные типы присутствуют во многих библиотеках базовых классов .NET 2.0, но пространство имен System.Collections.Generic буквально наполнено ими (что вполне соответствует его названию). Подобно своему “родственнику” без обобщений (System.Collections), пространство имен System.Collections.Generic содержит множество типов класса и интерфейса, что позволяет вкладывать элементы в самые разные контейнеры. Совсем не удивительно, что обобщенные интерфейсы имитируют соответствующие необобщенные типы из пространства имен System.Collections.
- ICollection
- IComparer
- IDictionary
- IEnumerable
- IEnumerator
- IList
- IComparer
По соглашению для обобщенных типов их замещаемые параметры обозначаются буквами верхнего регистра. И хотя здесь допустимо использовать любые буквы (или слова), обычно используют T для обозначения типов, K — для ключей, а V — для значений.
В пространстве имен System.Collections.Generic определяется и ряд классов, реализующих многие из этих ключевых интерфейсов. В табл. представлены описания базовых типов класса из этого пространства имен, реализуемые ими интерфейсы и соответствующие типы из пространства имен System.Collections.
Обобщенный класс | Необобщенный аналог в System.Collections | Описание |
Collection | CollectionBase | База для обобщенной коллекции |
Comparer | Comparer | Выполняет сравнение двух обобщенных объектов |
Dictionary | Hashtable | Обобщенная коллекция пар имен и значений |
List | ArrayList | Список элементов с динамически изменяемыми размерами |
Queue | Queue | Обобщенная реализация списка FIFO (дисциплина обслуживания типа “очередь”) |
SortedDictionary | SortedList | Обобщенная реализация сортированного набора пар имен и значений |
Stack | Stack | Обобщенная реализация списка LIFO (дисциплина обслуживания типа “стек”) |
LinkedList | — | Обобщенная реализация двусвязного списка |
ReadOnlyCollection | ReadOnlyCollectionBase | Обобщенная реализация набора элементов только для чтения |