Без слов
От: Qbit86 Кипр
Дата: 10.01.17 12:51
Оценка:
https://github.com/dotnet/coreclr/.../EqualityComparer.cs:
using System;
using System.Collections.Generic;

internal class GenericEqualityComparer<T> : EqualityComparer<T> where T : IEquatable<T>
{
    public override bool Equals(T x, T y)
    {
        if (x != null)
        {
            if (y != null) return x.Equals(y);
            return false;
        }
        if (y != null) return false;
        return true;
    }

    public override int GetHashCode(T obj) => obj?.GetHashCode() ?? 0;

    // ...
}


Q>>Пример был про то, как вызывается метод констрейнта у экземпляра типа


V>Никак он не вызывается.

V>x.Equals(y) — это метод базового Object



internal struct Foo : IEquatable<Foo>
{
    public bool Equals(Foo other)
    {
        Console.WriteLine("Equals(Foo other)");
        return true;
    }

    public override bool Equals(object obj)
    {
        Console.WriteLine("Equals(object obj)");
        return true;
    }

    public override int GetHashCode() => 0;
}

internal static class Program
{
    private static void Main()
    {
        var comparer = new GenericEqualityComparer<Foo>();
        var x = new Foo();
        var y = new Foo();
        var equal = comparer.Equals(x, y);
        Console.WriteLine(equal);
    }
}


V>Тут нечего далее обсуждать. Усё, припыли.


Глаза у меня добрые, но рубашка — смирительная!
Отредактировано 10.01.2017 13:35 Qbit86 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.