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

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

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

private sealed class <>f__AnonymousType0'3'<'<Color>j__TPar',

  '<Make>j__TPar', <CurrentSpeed>j__TPar>'

  extends [System.Runtime][System.Object]

{

  // Поля только для инициализации.

  private initonly <Color>j__TPar <Color>i__Field;

  private initonly <CurrentSpeed>j__TPar <CurrentSpeed>i__Field;

  private initonly <Make>j__TPar <Make>i__Field;

  // Стандартный конструктор.

  public <>f__AnonymousType0(<Color>j__TPar Color,

    <Make>j__TPar Make, <CurrentSpeed>j__TPar CurrentSpeed);

  // Переопределенные методы.

  public override bool Equals(object value);

  public override int GetHashCode();

  public override string ToString();

  // Свойства только для чтения.

  <Color>j__TPar Color { get; }

  <CurrentSpeed>j__TPar CurrentSpeed { get; }

  <Make>j__TPar Make { get; }

}

Реализация методов ToString() и GetHashCode()

Все анонимные типы автоматически являются производными от System.Object и предоставляют переопределенные версии методов Equals(), GetHashCode() и ToString(). Реализация ToString() просто строит строку из пар "имя-значение". Вот пример:

public override string ToString()

{

  StringBuilder builder = new StringBuilder();

  builder.Append("{ Color = ");

  builder.Append(this.<Color>i__Field);

  builder.Append(", Make = ");

  builder.Append(this.<Make>i__Field);

  builder.Append(", CurrentSpeed = ");

  builder.Append(this.<CurrentSpeed>i__Field);

  builder.Append(" }");

  return builder.ToString();

}

Реализация GetHashCode() вычисляет хеш-значение, используя каждую переменную-член анонимного типа в качестве входных данных для типа System.Collections.Generic.EqualityComparer<T>. С такой реализацией GetHashCode() два анонимных типа будут выдавать одинаковые хеш-значения тогда (и только тогда), когда они обладают одним и тем же набором свойств, которым присвоены те же самые значения. Благодаря подобной реализации анонимные типы хорошо подходят для помещения внутрь контейнера Hashtable. 

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

Семантика эквивалентности анонимных типов

Наряду с тем, что реализация переопределенных методов ToString() и GetHashCode() прямолинейна, вас может интересовать, как был реализован метод Equals(). Например, если определены две переменные "анонимных автомобилей" с одинаковыми наборами пар "имя-значение", то должны ли эти переменные считаться эквивалентными? Чтобы увидеть результат такого сравнения, дополните класс Program следующим новым методом:

static void EqualityTest()

{

  // Создать два анонимных класса с идентичными наборами

  // пар "имя-значение".

  var firstCar = new { Color = "Bright Pink", Make = "Saab",

    CurrentSpeed = 55 };

  var secondCar = new { Color = "Bright Pink", Make = "Saab",

    CurrentSpeed = 55 };

  // Считаются ли они эквивалентными, когда используется Equals()?

  if (firstCar.Equals(secondCar))

  {

    Console.WriteLine("Same anonymous object!");

                 // Тот же самый анонимный объект

  }

    else

  {

    Console.WriteLine("Not the same anonymous object!");

                 // He тот же самый анонимный объект

  }

  // Можно ли проверить их эквивалентность с помощью операции ==?

  if (firstCar == secondCar)

  {

    Console.WriteLine("Same anonymous object!");

                 // Тот же самый анонимный объект

  }

  else

  {

    Console.WriteLine("Not the same anonymous object!");

                 // He тот же самый анонимный объект

  }

  // Имеют ли эти объекты в основе один и тот же тип?

  if (firstCar.GetType().Name == secondCar.GetType().Name)

  {

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

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

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


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

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


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

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

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


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