StringComparison.OrdinalIgnoreCase);
}
else
{
throw new ArgumentException("Parameter is not a Car!");
// Параметр не является объектом типа Car!
}
}
}
}
Вспомогательный класс PetNameComparer
System.Array содержит несколько перегруженных версий метода Sort, одна из которых принимает объект, реализующий интерфейс IComparer:...
// Теперь сортировать по дружественному имени.
Array.Sort(myAutos, new PetNameComparer);
// Вывести отсортированный массив.
Console.WriteLine("Ordering by pet name:");
foreach(Car c in myAutos)
{
Console.WriteLine("{0} {1}", c.CarID, c.PetName);
}
...
Специальные свойства и специальные типы сортировки
Важно отметить, что вы можете применять специальное статическое свойство, оказывая пользователю объекта помощь с сортировкой типов Car
Car добавлено статическое свойство только для чтения по имени SortByPetName, которое возвращает экземпляр класса, реализующего интерфейс IComparer (в этом случае PetNameComparer; не забудьте импортировать пространство имен System.Collections):// Теперь мы поддерживаем специальное свойство для возвращения
// корректного экземпляра, реализующего интерфейс IComparer.
public class Car : IComparable
{
...
// Свойство, возвращающее PetNameComparer.
public static IComparer SortByPetName
=> (IComparer)new PetNameComparer;}
Теперь в коде массив можно сортировать по дружественному имени, используя жестко ассоциированное свойство, а не автономный класс PetNameComparer
// Сортировка по дружественному имени становится немного яснее.
Array.Sort(myAutos, Car.SortByPetName);
К настоящему моменту вы должны не только понимать способы определения и реализации собственных интерфейсов, но также оценить их полезность. Конечно, интерфейсы встречаются внутри каждого важного пространства имен .NET Core, а в оставшихся главах книги вы продолжите работать с разнообразными стандартными интерфейсами.
Резюме
Интерфейс может быть определен как именованная коллекция абстрактных членов. Интерфейс общепринято расценивать как поведение, которое может поддерживаться заданным типом. Когда два или больше число типов реализуют один и тот же интерфейс, каждый из них может трактоваться одинаковым образом (полиморфизм на основе интерфейсов), даже если типы определены в разных иерархиях.
Для определения новых интерфейсов в языке C# предусмотрено ключевое слово interface
В дополнение к построению специальных интерфейсов библиотеки .NET Core определяют набор стандартных (т.е. поставляемых вместе с платформой) интерфейсов. Вы видели, что можно создавать специальные типы, которые реализуют предопределенные интерфейсы с целью поддержки набора желательных возможностей, таких как клонирование, сортировка и перечисление.
Глава 9
Время существования объектов
К настоящему моменту вы уже умеете создавать специальные типы классов в С#. Теперь вы узнаете, каким образом исполняющая среда управляет размещенными экземплярами классов (т.е. объектами) посредством
delete). Взамен объекты .NET Core размещаются в области памяти, которая называется Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT