Как правильно писать тесты 46 Цикл разработки 46 Структура проекта с тестами 51 Утверждения (Asserts) 52 Утверждения в форме ограничений 54 Категории 56
Вид материала | Тесты |
СодержаниеСоздание обобщенных методов |
- Некорректные задания, 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.
Тип List
Подобно необобщенным классам, обобщенные классы являются объектами, размещаемыми в динамической памяти, поэтому для них следует использовать new со всеми необходимыми аргументами конструктора. Кроме того, вы должны указать типы, замещающие параметры, определенные обобщенным типом. Так, для System.Collections.Generic.List
static void Main(string[] args)
{
// Создается List для хранения целых чисел.
List
// Создается List для хранения объектов SportsCar.
List
// Создается List для хранения объектов Person.
List
myPeople = new List
();
}
В этот момент вы можете поинтересоваться, что же на самом деле становится значением заполнителя. Открыв окно определения программного кода в Visual Studio, вы увидите, что везде в определении типа List
// Часть листинга для типа List
namespace System.Collections.Generic
{
public class List
IList
IList, ICollection, IEnumerable
{
...
public void Add(T item);
public IList
public int BinarySearch(T item);
public bool Contains(T item);
public void CopyTo(T[] array);
public int FindIndex(System.Predicate
public T FindLast(System.Predicate
public bool Remove(T item);
public int RemoveAll(System.Predicate
public T[] ToArray();
public bool TrueForAll(System.Predicate
public T this[int index] { get; set; }
...
}
}
Когда вы создаете тип List
namespace System.Collections.Generic
{
public class List
IList
IList, ICollection, IEnumerable
{
...
public void Add(SportsCar item);
public IList
public int BinarySearch(SportsCar item);
public bool Contains(SportsCar item);
public void CopyTo(SportsCar[] array);
public int FindIndex(System.Predicate
public SportsCar FindLast(System.Predicate
public bool Remove(SportsCar item);
public int RemoveAll(System.Predicate
public SportsCar [] ToArray();
public bool TrueForAll(System.Predicate
public SportsCar this[int index] { get; set; }
...
}
}
Конечно, когда вы создаете обобщенный List
Создание обобщенных методов
Чтобы научиться интегрировать обобщения в проекты, мы начнем с простого примера обычной подпрограммы свопинга. Целью этого примера является построение метода обмена, который сможет работать с любыми типами данных (характеризуемыми значениями или ссылками), используя для этого один параметр типа. В силу самой природы алгоритмов свопинга входные параметры будут посылаться по ссылке (с помощью ключевого слова C# ref). Вот соответствующая полная реализация.
// Этот метод переставляет любые два элемента,
// определенные параметром типа
static void Swap
{
Console.WriteLine("Методу Swap() передано {0}",
typeof(T));
T temp;
temp = a;
a = b;
b = temp;
}
Обратите внимание на то, что обобщенный метод определяется с помощью указания параметра типа, размещаемого после имени метода, но перед списком параметров. Здесь вы заявляете, что метод Swap() может работать с любыми двумя параметрами типа
static void Main(string[] args)
{
Console.WriteLine("***** Забавы с обобщениями *****\n");
// Обмен между двумя целыми.
int a = 10, b = 90;
Console.WriteLine("До обмена: {0}, {1}", a, b);
Swap
Console.WriteLine("После обмена: {0}, {1}", a, b);
Console.WriteLine();
// Обмен между двумя строками.
string s1 = "Hello", s2 = "There";
Console.WriteLine("До обмена: {0} {1}!", s1, s2);
Swap
Console.WriteLine("После обмена: {0} {1}!", s1, s2);
Console.ReadLine();
}