Virtuella medlemmar
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.
Virtuella medlemmar kan åsidosättas, vilket ändrar beteendet för underklassen. De liknar återanrop när det gäller utökningsbarheten, men de är bättre när det gäller körningsprestanda och minnesförbrukning. Dessutom känns virtuella medlemmar mer naturliga i scenarier som kräver att du skapar en speciell typ av en befintlig typ (specialisering).
Virtuella medlemmar presterar bättre än återanrop och händelser, men presterar inte bättre än icke-virtuella metoder.
Den största nackdelen med virtuella medlemmar är att beteendet för en virtuell medlem bara kan ändras vid tidpunkten för kompilering. Beteendet för ett återanrop kan ändras vid körning.
Virtuella medlemmar, till exempel återanrop (och kanske mer än återanrop), är kostsamma att utforma, testa och underhålla eftersom alla anrop till en virtuell medlem kan åsidosättas på oförutsägbara sätt och kan köra godtycklig kod. Dessutom krävs vanligtvis mycket mer arbete för att tydligt definiera kontraktet för virtuella medlemmar, så kostnaden för att utforma och dokumentera dem är högre.
❌ Gör INTE medlemmar virtuella om du inte har en bra anledning att göra det och du är medveten om alla kostnader som rör design, testning och underhåll av virtuella medlemmar.
Virtuella medlemmar är mindre förlåtande när det gäller ändringar som kan göras i dem utan att bryta kompatibiliteten. Dessutom är de långsammare än icke-virtuella medlemmar, främst för att anrop till virtuella medlemmar inte är inlined.
✔️ ÖVERVÄG att begränsa utökningsbarheten till endast det som är absolut nödvändigt.
✔️ Föredrar skyddad tillgänglighet framför offentlig tillgänglighet för virtuella medlemmar. Offentliga medlemmar bör ge utökningsbarhet (om det behövs) genom att anropa till en skyddad virtuell medlem.
De offentliga medlemmarna i en klass bör tillhandahålla rätt uppsättning funktioner för direkta användare av den klassen. Virtuella medlemmar är utformade för att åsidosättas i underklasser, och skyddad tillgänglighet är ett bra sätt att begränsa alla virtuella utökningspunkter till där de kan användas.
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.