Nettó, kódszerződések
A szerződéstervezés egy ötlet, amelyet az Eiffel programozási nyelvből vettek kölcsön. A .NET 4 System.Diagnostics.Contracts namespace tartalmazza az osztályokat a statikus kódellenőrzésekhez és a futásidejű ellenőrzésekhez, amelyeket minden .NET nyelv használható.
Ezzel a funkcióval meg lehet határozni a módszeren belüli előfeltételeket, utófeltételeket és invariánsokat. Az előfeltételek felsorolják azokat a követelményeket, amelyeknek a paramétereknek meg kell felelniük, a posztondíciók határozzák meg a visszaküldött adatok követelményeit és az invariánsokat - a változók követelményeit a módszeren belül.
A szerződéssel kapcsolatos információkat össze lehet állítani a hibakeresés és a munkakód megadásával. Meghatározhat egy különálló szerződésszerkezetet is, és sok ellenőrzés statikusan is végrehajtható, anélkül, hogy futtatná az alkalmazást.
A szerződések meghatározhatók az interfészeken; ez kényszeríti az interfészek megvalósítását ezen szerződések követelményeinek teljesítése érdekében. Feldolgozás szerszámok szerződések átírható összeszerelés, tesztelés szerződés végrehajtását a kódot végrehajtás működése során az alkalmazást, ellenőrizze a szerződés idején összeállítása és információk hozzáadása szerződéseket a generált XML dokumentumok.
A kódszerződést a szerződés szerinti osztály határozza meg. A módszerben rögzített szerződések minden követelményét, függetlenül attól, hogy ezek előfeltételek vagy kikötések, a módszer elején kell elhelyezni. Ön is hozzárendelhet egy globális eseménykezelőt a Szerződésben nem sikerült eseményhez, amelyet a szerződés futásidejű megsértéséért hívnak meg. A ContractFailedEventArgs típusú e paraméterrel rendelkező SetHandled () hívás leállítja a szokásos viselkedést, ha a kivétel felmerül.
Előfeltétel (szükséges)
Az előfeltételek ellenőrzik a Requires () és Requires (Módosítva) követelményeket
Az alább bemutatott szerződés egy ArgumentNullException-t dob, ha az o argumentum nulla. Kivétel nem jön létre, ha a ContractFailed eseménykezelő az eseményt kezeli. Ezenkívül, ha a Projekttulajdonságok ablakban az Ellenőrzés a szerződéses hibára jelölőnégyzet be van jelölve, ahelyett, hogy meghatározott kivételt generálna, a Trace.Assert () módszer a program befejezésére szólít fel:
A hívás szükséges
A régi kód óriási tömegében az argumentumokat gyakran ellenőrizzük az if utasítások, kivéve ha a megadott feltétel sérül. A kódszerződések miatt nincs szükség az ellenőrzés visszaírására. Csak egy sornyi kódot adjon hozzá:
Az EndContractBlock () azt írja elő, hogy az előző kódot szerződésként kell feldolgozni. Ha más szerződéses üzemeltetőket használnak, akkor az EndContractBlock () nem szükséges.
Az argumentumként használt gyűjtemények teszteléséhez a Szerződés osztály biztosít Exists () és ForAll () módszereket. A ForAll () módszer a gyűjtemény egyes elemeit ellenőrzi. A következő példa azt vizsgálja, hogy a gyűjtemény minden elemének értéke kisebb-e 12-nél. Az Exists () metódus segítségével ellenőrizheti, hogy a feltétel megfelel-e legalább egy gyűjteményelemnek:
Mindkét módszer, Exists () és ForAll (), túlterheléssel rendelkezik, amely az IE számjegyű helyett
Testtartás (Biztosítja)
A posztpozíciók meghatározása biztosítja, hogy a megosztott adatokkal és a visszatérési értékekkel kapcsolatos bizonyos feltételek teljesüljenek. És bár bizonyos garanciákat határoztak meg a visszatérési értékekről, mindazonáltal meg kell őket írni a módszer elején; az összes szerződéses követelményt a módszer elején kell meghatározni.
Biztosítja () és biztosítja az OthThrow-ot
Az EnsuresOnThrow segítségével
Annak érdekében, hogy biztosítsa a Return értéket az Ensures () szerződéssel, speciális Eredmény érték használható
Az értéket a régi értékkel is összehasonlíthatja. Ez a 01dValue módszer használatával történik
invariánsokat
Az invariánsok a változókra vonatkozó szerződéseket a módszer élettartama alatt határozzák meg. A Contract.Requires () megadja a bemeneti követelményeket, a Contract.Ensures () - követelményeket a módszer végére. A Contract.Invariant () meghatározza azokat a feltételeket, amelyeknek teljesülniük kell a módszer élettartama során: