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


Konstruktor tervezése

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.

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. Példánykonstruktorok használhatók. A paramétereket nem használó példánykonstruktorokat gyakran paraméter nélküli konstruktoroknak nevezzük.

A konstruktorok a legtermészetesebb módja egy típus példányainak létrehozásához. 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.

✔️ DO használjon konstruktorparamétereket a fő tulajdonságok beállításának egyszerűsítéseként.

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.

Végezzen minimális munkát a konstruktorban.

A konstruktoroknak nem szabad sok munkát végezniük, azon kívül, hogy rögzítik a konstruktor paramétereit. Az egyéb feldolgozás költségeit a szükséges időpontig el kell halasztani.

✔️ Tegyen kivételeket a példánykonstruktorokból, ha megfelelő.

✔️ 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

✔️ Tegye a statikus konstruktorokat privátokká.

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 dobjon ki kivételeket statikus konstruktorokból.

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.

Ú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.

Lásd még