Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ezt a tartalmat a Pearson Education, Inc. engedélyével nyomtatjuk újra a Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition című műből. Ezt a kiadást 2008-ban adták ki, és a könyvet azóta teljesen átdolgozták a harmadik kiadásban. Előfordulhat, hogy az oldalon található információk némelyike elavult.
A keretrendszertervezők egyik alapvető tervezési döntése, hogy osztályként (referenciatípusként) vagy szerkezetként (értéktípusként) terveznek-e típust. A referenciatípusok és az értéktípusok viselkedésének különbségeinek megértése elengedhetetlen a választáshoz.
A referenciatípusok és az értéktípusok közötti első különbség az, hogy a referenciatípusok a halomra és a szemétgyűjtésre vannak lefoglalva, míg az értéktípusok vagy a veremen vagy a beágyazott típusok között vannak lefoglalva, és felszabadítva a verem visszatekerésekor vagy a tárolótípus felszabadításakor. Ezért az értéktípusok kiosztása és felszabadítása általában olcsóbb, mint a referenciatípusok kiosztása és felszabadítása.
Ezután a hivatkozástípusok tömbjei soron kívül vannak lefoglalva, ami azt jelenti, hogy a tömbelemek csak a halomon található referenciatípus példányaira hivatkoznak. Az értéktípusú tömbök beágyazottan vannak lefoglalva, vagyis a tömbelemek maguk az értéktípus tényleges példányai. Ezért az érték típusú tömbök lefoglalásai és felszabadításai sokkal olcsóbbak, mint a referencia típusú tömbök lefoglalásai és felszabadításai. Emellett az esetek többségében az érték típusú tömbök sokkal jobb hivatkozási helyeket mutatnak.
A következő különbség a memóriahasználattal kapcsolatos. Az értéktípusok akkor lesznek bekeretezve, ha referenciatípusra vagy az általuk implementált felületek egyikére kerülnek. Értéktípusba való visszaalakításkor a referencia típust kicsomagolják. Mivel a dobozok olyan objektumok, amelyek a halomra vannak lefoglalva, és szemetet gyűjtenek, a túl sok dobozolás és a dobozolás negatív hatással lehet a halomra, a szemétgyűjtőre és végső soron az alkalmazás teljesítményére. Ezzel szemben, a referenciatípusok átcastolása során nem történik meg a boxolás. (További információ: Boxing and Unboxing).
Ezután a referenciatípus-hozzárendelések a hivatkozást másolják, míg az értéktípus-hozzárendelések a teljes értéket másolják. Ezért a nagy referenciatípusok hozzárendelése olcsóbb, mint a nagy értéktípusok hozzárendelése.
Végül a referenciatípusok hivatkozással vannak átadva, míg az értéktípusok érték szerint vannak átadva. A hivatkozástípus egy példányának módosítása hatással van a példányra mutató összes hivatkozásra. Az értéktípus-példányok másolása akkor történik meg, amikor azokat érték alapján továbbítja a rendszer. Ha egy értéktípus egy példányát módosítják, az természetesen nem befolyásolja egyik példányát sem. Mivel a másolatokat nem a felhasználó hozza létre explicit módon, hanem implicit módon jönnek létre az argumentumok átadásakor vagy visszaadott értékek visszaadásakor, a módosítható értéktípusok sok felhasználó számára zavaróak lehetnek. Ezért az értéktípusoknak nem módosíthatóknak kell lenniük.
Ökölszabályként a keretrendszer típusok többségének osztályoknak kell lennie. Vannak azonban olyan helyzetek, amikor egy értéktípus jellemzői megfelelőbbé teszik a szerkezetek használatát.
✔️ Érdemes lehet osztály helyett szerkezetet definiálni, ha a típuspéldányok kicsik és gyakran rövid élettartamúak, vagy gyakran más objektumokba vannak beágyazva.
❌ KERÜLJE a szerkezet definiálását, kivéve, ha a típus az alábbi jellemzők mindegyikével rendelkezik:
Logikailag egyetlen értéket jelöl, hasonlóan a primitív típusokhoz (
intstbdouble.).A példány mérete 16 bájt alatt van.
Nem módosítható.
Nem kell gyakran dobozolni.
Minden más esetben osztályként kell definiálnia a típusokat.
© Részletek 2005, 2009 Microsoft Corporation. Minden jog fenntartva.
Újranyomva a Pearson Education, Inc. engedélyével, Krzysztof Cwalina és Brad Abrams Framework Design Guidelines: Konvenciók, Idiomák és Minták az Újrafelhasználható .NET Könyvtárak Számára, 2. kiadás című könyvéből, közzétéve 2008. október 22-én, a Addison-Wesley Professional által, a Microsoft Windows Fejlesztési Sorozat részeként.