Operátory rovnosti

Poznámka:

Tento obsah je znovu vytištěn oprávněním Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms a Patterns for Reusable .NET Libraries, 2. vydání. Tato edice byla publikována v roce 2008 a kniha byla od té doby plně upravena ve třetím vydání. Některé informace na této stránce můžou být zastaralé.

Tato část popisuje přetížení operátorů rovnosti a odkazuje na operator== operátory rovnosti a operator!= jako operátory rovnosti.

❌ NEPŘETĚŽUJTE jeden z operátorů rovnosti, nikoli druhý.

✔️ Zajistěte, aby Object.Equals operátory rovnosti měly přesně stejnou sémantiku a podobné charakteristiky výkonu.

To často znamená, že Object.Equals je potřeba přepsat, když jsou operátory rovnosti přetížené.

❌ Vyhněte se vyvolání výjimek z operátorů rovnosti.

Například vrátí hodnotu false, pokud jeden z argumentů je null místo vyvolání NullReferenceException.

Operátory rovnosti u typů hodnot

✔️ Přetěžujte operátory rovnosti u typů hodnot, pokud je rovnost smysluplná.

Ve většině programovacích operator== jazyků neexistuje výchozí implementace pro typy hodnot.

Operátory rovnosti u referenčních typů

❌ Vyhněte se přetížení operátorů rovnosti u proměnlivých referenčních typů.

Mnoho jazyků má předdefinované operátory rovnosti pro odkazové typy. Předdefinované operátory obvykle implementují rovnost odkazů a mnoho vývojářů je překvapeno, když se výchozí chování změní na rovnost hodnot.

Tento problém je zmírnit u neměnných referenčních typů, protože neměnnost je mnohem obtížnější si všimnout rozdílu mezi rovností odkazů a rovností hodnot.

❌ Vyhněte se přetížení operátorů rovnosti u referenčních typů, pokud by implementace byla výrazně pomalejší než rovnost odkazů.

© Části 2005, 2009 Microsoft Corporation. Všechna práva vyhrazena.

Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published Oct 22, 2008 by Addison-Wesley Professional v rámci Microsoft Windows Development Series.

Viz také