Megosztás a következőn keresztül:


Konstruktor tervezése

Feljegyzés

Ezt a tartalmat a Pearson Education, Inc. engedélyével nyomtatjuk újra a Framework Design Guidelines: Conventions, Idioms és Patterns for Reusable .NET Libraries, 2nd Edition engedélyével. 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.

Kétféle konstruktor létezik: típuskonstruktorok és példánykonstruktorok.

A típuskonstruktorok statikusak, és a CLR futtatja a típus használata előtt. A példánykonstruktorok egy típuspéldány létrehozásakor futnak.

A típuskonstruktorok nem fogadnak el paramétereket. A példánykonstruktorok képesek. A paramétereket nem használó példánykonstruktorokat gyakran paraméter nélküli konstruktoroknak nevezzük.

A konstruktorok a legtermtermeltebb módszer egy típusú példányok létrehozására. A legtöbb fejlesztő keres és próbál konstruktort használni, mielőtt megfontolná a példányok létrehozásának alternatív módjait (például a gyári módszereket).

✔️ FONTOLJA meg egyszerű, ideális esetben alapértelmezett konstruktorok biztosítását.

Egy egyszerű konstruktor nagyon kevés paraméterrel rendelkezik, és minden paraméter primitív vagy szám. Az ilyen egyszerű konstruktorok növelik a keretrendszer használhatóságát.

✔️ FONTOLJA meg, hogy statikus gyári módszert használjon konstruktor helyett, ha a kívánt művelet szemantikája nem kapcsolódik közvetlenül egy új példány felépítéséhez, vagy ha a konstruktortervezési irányelvek követése természetellenesnek tűnik.

✔️ A DO konstruktorparamétereket használ a fő tulajdonságok beállításához.

A szemantikában nem lehet különbség az üres konstruktor, majd egyes tulajdonságkészletek és a több argumentumot tartalmazó konstruktor használata között.

✔️ DO használja ugyanazt a nevet a konstruktorparaméterekhez és egy tulajdonsághoz, ha a konstruktor paramétereit használja a tulajdonság egyszerű beállításához.

Az ilyen paraméterek és a tulajdonságok közötti egyetlen különbség a burkolat.

✔️ Minimális munka a konstruktorban.

A konstruktorok csak a konstruktor paramétereit rögzítik. Az egyéb feldolgozás költségeit a szükséges időpontig el kell halasztani.

✔️ A DO kivételeket ad ki a példánykonstruktoroktól, ha szükséges.

✔️ A DO explicit módon deklarálja a nyilvános paraméter nélküli konstruktort osztályokban, ha ilyen konstruktorra van szükség.

Ha nem deklarál kifejezetten konstruktorokat egy típuson, számos nyelv (például C#) automatikusan hozzáad egy nyilvános paraméter nélküli konstruktort. (Az absztrakt osztályok védett konstruktort kapnak.)

Paraméteres konstruktor osztályhoz való hozzáadása megakadályozza, hogy a fordító hozzáadja a paraméter nélküli konstruktort. Ez gyakran okoz véletlen törési változásokat.

❌ NE definiáljon explicit módon paraméter nélküli konstruktorokat a szerkezeteken.

Ez felgyorsítja a tömbök létrehozását, mert ha a paraméter nélküli konstruktor nincs definiálva, akkor nem kell futtatnia a tömb minden pontján. Vegye figyelembe, hogy sok fordító, köztük a C# nem teszi lehetővé, hogy a szerkezetek paraméter nélküli konstruktorokkal rendelkezzenek ezért.

❌ NE hívja meg a virtuális tagokat egy objektumon a konstruktoron belül.

A virtuális tag meghívása akkor is meghívja a legtöbb származtatott felülbírálást, ha a leg származtatottabb típusú konstruktor még nem lett teljesen futtatva.

Típuskonstruktorra vonatkozó irányelvek

✔️ DO, hogy statikus konstruktorok privát.

Egy statikus konstruktort, más néven osztálykonstruktort használnak egy típus inicializálására. A CLR meghívja a statikus konstruktort a típus első példányának létrehozása előtt, vagy meghívja az adott típus bármely statikus tagját. A felhasználó nem szabályozhatja a statikus konstruktor meghívását. Ha egy statikus konstruktor nem privát, a CLR-étől eltérő kóddal hívható meg. A konstruktorban végrehajtott műveletektől függően ez váratlan viselkedést okozhat. A C#-fordító a statikus konstruktorokat privátra kényszeríti.

❌ NE dobja ki a statikus konstruktorok kivételeit.

Ha egy típuskonstruktor kivételt jelez, a típus nem használható az aktuális alkalmazástartományban.

✔️ Fontolja meg a statikus mezők beágyazott inicializálását a statikus konstruktorok explicit használata helyett, mivel a futtatókörnyezet képes optimalizálni azoknak a típusoknak a teljesítményét, amelyek nem rendelkeznek explicit módon definiált statikus konstruktorokkal.

© Részletek 2005, 2009 Microsoft Corporation. Minden jog fenntartva.

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 22, 2008 by Addison-Wesley Professional, a Microsoft Windows Development Series részeként.

Lásd még