Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю Страница 228
- Категория: Компьютеры и Интернет / Базы данных
- Автор: Троелсен Эндрю
- Страниц: 642
- Добавлено: 2023-08-26 14:00:22
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту pbn.book@yandex.ru для удаления материала
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю краткое содержание
Прочтите описание перед тем, как прочитать онлайн книгу «Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю» бесплатно полную версию:В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.
Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.
Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю читать онлайн бесплатно
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)
{
Жалоба
Напишите нам, и мы в срочном порядке примем меры.