Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

    public int BinarySearch(<b>Person</b> item);

    public bool Contains(<b>Person</b> item);

    public void CopyTo(<b>Person</b>[] array);

    public int FindIndex(System.Predicate&lt;<b>Person</b>&gt; match);

    public Person FindLast(System.Predicate&lt;<b>Person</b>&gt; match);

    public bool Remove(<b>Person</b> item);

    public int RemoveAll(System.Predicate&lt;<b>Person</b>&gt; match);

    public <b>Person</b>[] ToArray();

    public bool TrueForAll(System.Predicate&lt;<b>Person</b>&gt; match);

    public <b>Person</b> this[int index] { get; set; }

  }

}

Несомненно, когда вы создаете в коде переменную обобщенного типа List&lt;T&gt;, компилятор вовсе не создает новую реализацию класса List&lt;T&gt;. Взамен он принимает во внимание только члены обобщенного типа, к которым вы действительно обращаетесь.

Указание параметров типа для обобщенных членов

В необобщенном классе или структуре разрешено поддерживать обобщенные свойства. В таких случаях необходимо также указывать значение заполнителя во время вызова метода. Например, класс System.Array поддерживает набор обобщенных методов. В частности, необобщенный статический метод Sort() имеет обобщенный аналог по имени Sort&lt;T&gt;(). Рассмотрим представленный далее фрагмент кода, где Т — тип int:

int[] myInts = { 10, 4, 2, 33, 93 };

<b>// Указание заполнителя для обобщенного метода Sort&lt;&gt;().</b>

Array.Sort&lt;int&gt;(myInts);

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:

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

public class Car : IComparable

{

  ...

  // Реализация IComparable.

  int IComparable.CompareTo(object obj)

  {

    if (obj is Car temp)

    {

      return this.CarID.CompareTo(temp.CarID);

    }

    throw new ArgumentException(&quot;Parameter is not a Car!&quot;);

                              // Параметр не является объектом типа Car!

  }

}

Теперь представим, что применяется обобщенный аналог данного интерфейса:

public interface IComparable&lt;T&gt;

{

  int CompareTo(T obj);

}

В таком случае код реализации будет значительно яснее:

public class Car : IComparable&lt;Car&gt;

{

  ...

  // Реализация IComparable&lt;T&gt;.

  int IComparable&lt;Car&gt;.CompareTo(Car obj)

  {

    if (this.CarID &gt; obj.CarID)

    {

      return 1;

    }

 if (this.CarID &lt; obj.CarID)

    {

      return -1;

    }

    return 0;

  }

}

Здесь уже не нужно проверять, относится ли входной параметр к типу Car, потому что он может быть только Car! В случае передачи несовместимого типа данных возникает ошибка на этапе компиляции. Теперь, углубив понимание того, как взаимодействовать с обобщенными элементами, а также усвоив роль параметров типа (т.е. заполнителей), вы готовы к исследованию классов и интерфейсов из пространства имен System.Collections.Generic.

Пространство имен System.Collections.Generic

Когда вы строите приложение .NET Core и необходим способ управления данными в памяти, классы из пространства имен System.Collections.Generic вероятно удовлетворят всем требованиям. В начале настоящей главы кратко упоминались некоторые основные необобщенные интерфейсы, реализуемые необобщенными классами коллекций. Не должен вызывать удивление тот факт, что в пространстве имен System.Collections.Generic для многих из них определены обобщенные замены.

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*