Udostępnij za pośrednictwem


Generowanie przesłonięć metod Equals i GetHashCode w programie Visual Studio

To generowanie kodu ma zastosowanie do:

  • C#

Co: Umożliwia generowanie metod Equals i GetHashCode .

Kiedy: Wygeneruj te przesłonięcia, gdy masz typ, który ma być porównywany przez co najmniej jedno pole, zamiast przez lokalizację obiektu w pamięci.

Dlaczego:

  • Jeśli implementujesz typ wartości, rozważ zastąpienie metody Equals . Możesz zwiększyć wydajność w przypadku domyślnej implementacji metody Equals w metodzie ValueType, gdy to zrobisz.

  • Jeśli implementujesz typ odwołania, rozważ zastąpienie metody Equals , jeśli typ wygląda jak typ podstawowy, taki jak Point, String, BigNumber itd.

  • Zastąpi metodę GetHashCode , aby umożliwić poprawne działanie typu w tabeli skrótów. Przeczytaj więcej wskazówek dotyczących operatorów równości.

Instrukcja

  1. Umieść kursor gdzieś w wierszu deklaracji typu.

    public class ImaginaryNumber
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    }
    

    Kod powinien wyglądać podobnie do poniższego zrzutu ekranu:

    Zrzut ekranu przedstawiający wyróżniony kod, na którym ma być zastosowana wygenerowana metoda

    Wskazówka

    Nie klikaj dwukrotnie nazwy typu lub opcja menu nie będzie dostępna. Wystarczy umieścić kursor gdzieś w wierszu.

  2. Następnie wybierz jedną z następujących akcji:

    • Naciśnij Ctrl+., aby wyzwolić menu Szybkie akcje i refaktoryzacje.

    • Kliknij prawym przyciskiem myszy i wybierz menu Szybkie akcje i refaktoryzacje .

    • Kliknij zrzut ekranu przedstawiający ikonę szybkich akcji śrubokręta w programie Visual Studio , która jest wyświetlana na lewym marginesie.

  3. W menu rozwijanym wybierz pozycję Generuj equals(obiekt) lub Generuj równości i GetHashCode.

    Zrzut ekranu przedstawiający menu rozwijane Generowanie przesłonięć

  4. W oknie dialogowym Wybieranie elementów członkowskich wybierz elementy członkowskie, dla których chcesz wygenerować metody:

    Okno dialogowe Generowanie przesłonięć

    Wskazówka

    Możesz również wygenerować operatory z tego okna dialogowego, używając pola wyboru w dolnej części okna dialogowego.

    Metody Equals i GetHashCode są generowane przy użyciu domyślnych implementacji, jak pokazano w poniższym kodzie:

    public class ImaginaryNumber : IEquatable<ImaginaryNumber>
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    
        public override bool Equals(object obj)
        {
            return Equals(obj as ImaginaryNumber);
        }
    
        public bool Equals(ImaginaryNumber other)
        {
            return other != null &&
                   RealNumber == other.RealNumber &&
                   ImaginaryUnit == other.ImaginaryUnit;
        }
    
        public override int GetHashCode()
        {
            return HashCode.Combine(RealNumber, ImaginaryUnit);
        }
    }
    

    Kod powinien wyglądać podobnie do poniższego zrzutu ekranu:

    Zrzut ekranu przedstawiający wynik wygenerowanej metody

Zobacz także