Likhetsoperatorer
Kommentar
Det här innehållet skrivs om med behörighet från Pearson Education, Inc. från Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Den utgåvan publicerades 2008, och boken har sedan dess reviderats helt i den tredje utgåvan. En del av informationen på den här sidan kan vara inaktuell.
I det här avsnittet beskrivs överbelastning av likhetsoperatorer och refererar till operator==
och operator!=
som likhetsoperatorer.
❌ Överbelasta INTE någon av likhetsoperatorerna och inte den andra.
✔️ Se till att Object.Equals och likhetsoperatorerna har exakt samma semantik och liknande prestandaegenskaper.
Detta innebär ofta att Object.Equals
måste åsidosättas när likhetsoperatorerna överbelastas.
❌ UNDVIK att utlösa undantag från likhetsoperatorer.
Returnera till exempel false om ett av argumenten är null i stället för att NullReferenceException
kasta .
Likhetsoperatorer för värdetyper
✔️ Överbelasta likhetsoperatorerna på värdetyper om likheten är meningsfull.
I de flesta programmeringsspråk finns det ingen standardimplementering av operator==
för värdetyper.
Likhetsoperatorer för referenstyper
❌ UNDVIK överlagring av likhetsoperatorer på föränderliga referenstyper.
Många språk har inbyggda likhetsoperatorer för referenstyper. De inbyggda operatorerna implementerar vanligtvis referensjämlikhet, och många utvecklare blir förvånade när standardbeteendet ändras till värdejämlikhet.
Det här problemet minimeras för oföränderliga referenstyper eftersom oföränderlighet gör det mycket svårare att märka skillnaden mellan referensjämlikhet och värdejämlikhet.
❌ UNDVIK att överbelasta likhetsoperatorer för referenstyper om implementeringen skulle vara betydligt långsammare än referensjämlikhet.
Portioner © 2005, 2009 Microsoft Corporation. Med ensamrätt.
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, publicerad 22 okt 2008 av Addison-Wesley Professional som en del av Microsoft Windows Development Series.