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.