public ReadOnlyCollection<T
public int BinarySearch(T
public bool Contains(T
public void CopyTo(T
public int FindIndex(System.Predicate<T
public T FindLast(System.Predicate<T
public bool Remove(T
public int RemoveAll(System.Predicate<T
public T
public bool TrueForAll(System.Predicate<T
public T
}
}
В случае создания List
Person результат будет таким же, как если бы тип List был определен следующим образом:namespace System.Collections.Generic
{
public class List<Person
: IList<Person
{
...
public void Add(Person
public void AddRange(IEnumerable<Person
public ReadOnlyCollection<Person
public int BinarySearch(Person
public bool Contains(Person
public void CopyTo(Person
public int FindIndex(System.Predicate<Person
public Person FindLast(System.Predicate<Person
public bool Remove(Person
public int RemoveAll(System.Predicate<Person
public Person
public bool TrueForAll(System.Predicate<Person
public Person
}
}
Несомненно, когда вы создаете в коде переменную обобщенного типа List
List. Взамен он принимает во внимание только члены обобщенного типа, к которым вы действительно обращаетесь.Указание параметров типа для обобщенных членов
В необобщенном классе или структуре разрешено поддерживать обобщенные свойства. В таких случаях необходимо также указывать значение заполнителя во время вызова метода. Например, класс System.Array
Sort имеет обобщенный аналог по имени Sort. Рассмотрим представленный далее фрагмент кода, где Т — тип int:int[] myInts = { 10, 4, 2, 33, 93 };
// Указание заполнителя для обобщенного метода Sort<>.
Array.Sort
foreach (int i in myInts)
{
Console.WriteLine(i);
}
Указание параметров типов для обобщенных интерфейсов
Обобщенные интерфейсы обычно реализуются при построении классов или структур,которые нуждаются в поддержке разнообразных аспектов поведения платформы (скажем, клонирования, сортировки и перечисления). В главе 8 вы узнали о нескольких необобщенных интерфейсах, таких как IComparable
IEnumerable, IEnumerator и IComparer. Вспомните, что необобщенный интерфейс IComparable определен примерно так:public interface IComparable
{
int CompareTo(object obj);
}
В главе 8 этот интерфейс также был реализован классом Car
System.Object:public class Car : IComparable
{
...
// Реализация IComparable.
int IComparable.CompareTo(object obj)
{
if (obj is Car temp)
{
return this.CarID.CompareTo(temp.CarID);
}
throw new ArgumentException("Parameter is not a Car!");
// Параметр не является объектом типа Car!
}
}
Теперь представим, что применяется обобщенный аналог данного интерфейса:
public interface IComparable
{
int CompareTo(T obj);
}
В таком случае код реализации будет значительно яснее:
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT