Контравариантность in в C#
Модификатор in ставят у параметра типа, который метод только
принимает и не возвращает. Реализацию для более широкого типа тогда
можно использовать там, где ждут более узкий тип.
Сравниватель получает два значения и возвращает число: меньше нуля, нуль или больше нуля. Сравниватель объектов умеет принять строку, потому что строка - это объект. Поэтому его сохраняют в переменную для строк. Обратное запрещено: сравниватель строк не умеет принять произвольный объект. Строка "cat" больше "ant":
IComparer<string> strings = new TextComparer();
Console.WriteLine(strings.Compare("cat", "ant"));
class TextComparer : IComparer<object>
{
public int Compare(object? a, object? b)
{
return string.Compare(a?.ToString(), b?.ToString());
}
}
Дан код:
string left = "dog";
string right = "cat";
Передайте сравнение объектов туда, где ждут сравнение строк. Сравните left и right и выведите результат.