Язык программирования C#9 и платформа .NET5. Страница 228
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.ObjectEquals()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Семантика эквивалентности анонимных типов
Наряду с тем, что реализация переопределенных методов
ToString()GetHashCode()Equals()Programstatic 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) {
Перейти на страницу:
Изменить размер шрифта: