1. Pakeiskite prieinamus laukus atributais
1、. .NET duomenų susiejimas palaiko tik duomenų susiejimą, o duomenų susiejimo privalumus galite gauti naudodami atributus. 2. Gauti ir nustatyti prieigą prie nuosavybės, galite naudoti užraktą, kad pridėtumėte kelių gijų palaikymą.
2. ReadOnly (vykdymo laiko konstanta) ir const (kompiliavimo laiko konstanta)
1. const gali būti naudojamas tik primityviems tipams, išvardijimams ir eilutėms, o readonly gali būti bet kokio tipo; 2. const bus pakeistas konkrečia konstanta kompiliavimo metu, todėl, jei nuorodoje naudojamos ir const, ir readonly reikšmės, pakeitimas į readonly pakeis pradinį dizaino tikslą, t. y. poreikį iš naujo kompiliuoti pakeistą mazgą, kad būtų galima iš naujo nurodyti naują pastovią reikšmę. 3. CONST yra efektyvesnis nei tik skaityti, tačiau praranda taikymo lankstumą.
3. IS ir AS
1. Abu yra tipų konvertavimai vykdymo metu, nes operatoriai gali būti naudojami tik nuorodų tipuose, o is gali naudoti reikšmes ir nuorodų tipus; 2. Įprasta praktika yra naudoti IS tipui nustatyti, o tada pasirinktinai pasirinkti naudoti kaip arba stipraus tipo konvertavimo operatorių (konversiją apibrėžia operatorius).
4. ConditionalAttribute vietoj #if #endif条件编译
1. ConditionalAttribute naudojamas tik metodo lygiu, o kiti elementai, tokie kaip tipai, atributai ir kt., yra negaliojantys. Ir #if #endif则不受此限制; 2. ConditionalAttribute gali pridėti kelias OR (OR) operacijas kompiliavimo sąlygoms, ir #if #endif则可以添加与(AND) [čia gali būti visiškai apibrėžtas kaip kitas atskiras simbolis]; 3. ConditioanlAttribute apibrėžimas gali būti įtrauktas į atskirą metodą, kad programa būtų lankstesnė.
5. Pateikite ToString() metodą
1. Jis gali draugiškiau teikti išsamią informaciją vartotojams; 2. Naudokite IFormatter.ToString() metodą, kad suteiktumėte lankstesnį tinkinimą, o jei pridėsite IFormatProvider ir ICustomFormatter sąsajas, bus prasmingiau tinkinti pranešimo išvestį.
6. Skirtumas tarp vertės ir nuorodos tipo
1. Reikšmių tipai nepalaiko polimorfizmo, kuris tinka programų valdomiems duomenims saugoti, o nuorodos palaiko polimorfizmą, kuris tinka programų elgesiui apibrėžti. 2. Masyvams, apibrėžtiems kaip reikšmių tipai, programos našumą galima žymiai pagerinti; 3. Vertės tipas turi mažiau krūvos atminties fragmentacijos, atminties šiukšlių ir netiesioginės prieigos laiko, o jo grąžinimas metode atliekamas replikacijos forma, kad vidinė struktūra nebūtų atskleista išoriniam pasauliui. 4. Reikšmių tipai naudojami šiais scenarijais: tipų atsakomybė daugiausia naudojama duomenų saugojimui; Viešosios sąsajos yra visiškai apibrėžtos pagal kai kuriuos duomenų nario prieigos atributus; Niekada nėra poklasių; Niekada nėra polimorfinio elgesio.
7. Reikšmių tipai turėtų būti įgyvendinami kuo pastovesni ir atominiai tipai
1. Padaryti mūsų kodą lengviau rašyti ir prižiūrėti; 2. Trys konstantų inicijavimo strategijos: konstrukcijoje; augalų metodas; Sukonstruokite kintamą pagalbinę klasę (pvz., StringBuilder).
8. Įsitikinkite, kad 0 yra vertas galiojančio statuso
1. Numatytoji reikšmės tipo būsena turi būti 0; 2. Išvardijimo tipo 0 neturėtų būti negaliojantis; FlagsAttribute yra užtikrinti, kad 0 reikšmė yra galiojanti būsena; 3. Kai eilutė tuščia, eilutę galima grąžinti. tuščia eilutė tuščia.
9. Daugybiniai vienodo sprendimo atstovavimo santykiai
1. ReferenceEquals() nustato, kad nuorodos yra lygios, ir tai turi būti tiesa, kai abi nurodo tą patį objektą. 2. Statinis Equals() metodas naudojamas pirmiausia priimti referencinį sprendimą, o tada įvertinti vertės tipą; 3. Norėdami įvertinti nuorodos tipą, galite naudoti perrašymo metodą Equals(), kai naudojate reikšmių semantiką. 4. Perrašant Equals() metodą, GetHashCode() metodas taip pat turėtų būti perrašytas, o operacija operationr==() turėtų būti pateikta tuo pačiu metu.
10. Supraskite GetHashCode() metodo trūkumus
1. GetHashCode() taikomas tik maišos pagrindu pagrįstų ** apibrėžtų raktų, tokių kaip HashTable arba Dictionary, maišos reikšmėms; 2. GetHashCode() turėtų laikytis atitinkamų trijų taisyklių: du vienodi objektai turėtų grąžinti tą patį maišos kodą; turėtų būti invariantas; Maišos funkcija turėtų sukurti atsitiktinį pasiskirstymą tarp visų sveikųjų skaičių.
11. Teikite pirmenybę foreach kilpos sakinių naudojimui
1. foreach gali pašalinti kompiliatoriaus patikrinimą for ciklo masyvo ribos; 2. Foreach apskritas kintamasis yra tik skaitomas, ir yra aiški transformacija, kuri išmeta išimtį, kai ** objekto tipas yra neteisingas; 3. **, kurį reikia naudoti foreach, yra: turėti viešą GetEnumberator() metodą; IEnumberable sąsaja yra aiškiai įdiegta. Įdiegta IEnumerator sąsaja; 4. foreach gali atnešti išteklių valdymo pranašumų, nes jei kompiliatorius gali nustatyti IDisposable sąsają, jis gali naudoti optimizuotą bandyti... galiausiai blokuoti;
12. Numatytojo lauko inicijavimas yra geresnis nei priskyrimo sakinys
1. Lauko gyvenimas pagal numatytuosius nustatymus inicijuos reikšmės tipą į 0, o nuorodos tipą į nulinį. 2. Kelis kartus inicijavus tą patį objektą, sumažės kodo vykdymo efektyvumas. 3. Lauko inicijavimas konstruktoriuje yra palankus išimčių tvarkymui.
13. Naudokite statinį konstruktorių, kad inicijuotumėte statinius narius
1. Statinis konstruktorius bus vykdomas prieš prisijungiant prie bet kokio klasės metodo, kintamojo ar atributo; 2. Statiniai laukai taip pat bus vykdomi prieš statinį konstruktorių, o statinis konstruktorius yra palankus išimčių tvarkymui.
14. Naudokite konstruktoriaus grandinę (in. NET 4.0 jau išsprendžia šią problemą su pasirenkamais parametrais)
1. Naudokite tai, kad perduotumėte inicijavimo darbą kitam konstruktoriui, ir naudokite bazę, kad iškviestumėte bazinės klasės konstruktorių; 2. Tipo egzempliorių operacijų seka yra tokia: nustatykite visus statinius laukus į 0; Statinių laukų iniciatorių vykdymas; statinis konstruktorius, vykdantis bazinę klasę; Statiniai konstruktoriai, vykdantys dabartinį tipą; Nustatykite visus egzemplioriaus laukus į 0; Vykdyti egzemplioriaus laukų iniciatorius; Vykdyti atitinkamą bazinės klasės egzemplioriaus konstruktorių; Vykdyti dabartinio tipo egzemplioriaus konstruktorių.
15. Norėdami išvalyti išteklius, naudokite teiginius naudojant ir išbandyti/pagaliau
Naudojant IDisposable sąsajos metodą Dispose(), GC.SuppressFinalize() gali būti naudojamas pranešti šiukšlių surinkėjui, kad galutinė operacija nebeatliekama.
16. Sumažinkite atminties šiukšles
1. Reikia papildomo procesoriaus laiko paskirstyti ir sunaikinti objektus krūvoje; 2. Priskirtų objektų skaičiaus mažinimo metodai: dažnai naudojami vietiniai kintamieji pakeliami į laukus; Pateikia klasę, kurioje saugomi įprasti Singleton objektų, išreiškiančių konkrečius tipus, egzemplioriai. 3. Naudokite "StringBuilder" sudėtingoms eilučių operacijoms atlikti.
17. Sumažinkite pakavimą ir išpakavimą
1. Atkreipkite dėmesį į numanomą tipo konvertavimą į System.Object, o reikšmės tipas neturėtų būti pakeistas System.Object tipu; 2. Naudojant sąsajas, o ne tipus, galima išvengti bokso, tai yra, įdiegti reikšmių tipus iš sąsajų, o tada iškviesti narius per sąsajas.
18. Įdiekite standartinį šalinimo režimą
1. Norint naudoti ne atminties išteklius, jis turi turėti finalizatorių, šiukšlių surinkėjas įtrauks įdiegtus finalizatoriaus objektus į nutraukimo eilę, užbaigęs atminties objektus, kurie jų nenutraukė, o tada šiukšlių surinkėjas pradės naują giją, kad paleistų šių objektų užbaigėjus. Tai gali padėti išvengti atminties nutekėjimo problemos, kurią sukelia nevaldomi atminties ištekliai. 2. Naudojant IDisposable.Dispose() metodą reikia keturių darbo aspektų: atlaisvinti visus nevaldomus išteklius; Atlaisvinkite visus valdomus išteklius; Nustatykite būsenos žymeklį, nurodantį, ar Dispose() buvo įvykdytas; Iškvieskite GC.SuppressFinalize(this), kad atšauktumėte objekto nutraukimo operaciją; 3. Pridėkite apsaugotą virtualų metodą Dispose() prie tipo, kuriam reikalingas polimorfizmas, ir išvestinė klasė išleidžia savo užduotį perrašydama šį metodą. 4. Tipo, kuriam reikalinga IDisoposable sąsaja, turėtume įdiegti terminatorių, net jei mums jo nereikia.
19. Apibrėžkite ir įgyvendinkite paveldėjimo tipų sąsajas
1. Nesusiję tipai gali kartu įgyvendinti bendrą sąsają, ir lengviau įdiegti sąsają nei paveldėjimą; 2. Sąsaja yra gana stabili, ji apima funkcijų rinkinį sąsajoje kaip kitų tipų įgyvendinimo sutartis, o bazinė klasė laikui bėgant gali būti išplėsta.
20. Atskirkite sąsajos diegimą ir virtualaus metodo perrašymą
1. Įgyvendinant sąsają bazinėje klasėje, išvestinė klasė turi naudoti naują, kad paslėptų bazinės klasės metodo naudojimą; 2. Bazinės klasės sąsajos metodas gali būti paskelbtas kaip virtualus metodas, o tada įdiegtas išvestinėje klasėje.
21. Naudokite pavedimą atgaliniams skambučiams išreikšti
1. Pats atstovas nepateikia jokių išimčių fiksavimo, todėl bet koks daugiaadresis atstovo skambutis nutrauks visą skambučių grandinę. 2. Rodydami ir iškviesdami kiekvieną delegavimo tikslą delegavimo grandinėje, galite išvengti daugiaadresių delegatų, grąžinančių tik paskutinio atstovo išvestį.
22. Naudokite įvykius išorinėms sąsajoms apibrėžti
1. Jis turėtų būti paskelbtas kaip bendras įvykis, ir tegul kompiliatorius sukurti pridėti ir perkelti metodus mums. 2. Naudokite System.ComponentModel.EventHandlerList konteinerį kiekvienai įvykių apdorojimo programai saugoti ir paslėpkite visų įvykių sudėtingumą, kai tipe yra daug įvykių.
23. Venkite grąžinti nuorodas į vidinius klasės objektus
1. Kadangi prieiga prie vertės tipo objekto sukurs objekto kopiją, vertės tipo apibrėžimo atributai visiškai nepakeis būsenos tipo objekte; 2. Pastovūs tipai gali išvengti objekto būsenos keitimo; 3. Apibrėžkite sąsają, kad apribotumėte prieigą prie poaibio, kad sumažintumėte žalą vidinei objekto būsenai. 4. Apibrėžkite įvyniojimo objektą, kad apribotumėte prieigą prie kito objekto; 5. Kai kliento kodas keičia vidinius duomenų elementus, gali būti įdiegtas stebėtojo režimas, kad objektas galėtų patikrinti arba atitikti pakeitimus.
24. Deklaratyvus programavimas yra geriau nei privalomas programavimas
Galima išvengti klaidų keliuose panašiuose ranka rašytuose algoritmuose ir pateikiamas aiškus ir įskaitomas kodas.
25. Įgyvendinkite kuo serializuojamus tipus
1. Tipas nėra vartotojo sąsajos valdiklis, langas ar forma, ir tipas turėtų palaikyti serializavimą; 2. Pridedant deserializuotą NonSerializedAttribute atributą, numatytąją reikšmę galima įkelti naudojant OnDeserialization() metodą, kuris įgyvendina IDeserializationCallback; 3. Versijų valdyme galite naudoti ISerializable sąsają lanksčiam valdymui ir pateikti serializacijos konstruktorių, kad inicijuotumėte objektus pagal srauto duomenis, taip pat diegdami reikalauti SerializationFormatter išimčių leidimo. 4. Jei jums reikia sukurti išvestinę klasę, turite pateikti išvestinės klasės kabliuko metodą.
26. Naudokite "IComparable" ir "IComparer" sąsajas rūšiavimo ryšiams įgyvendinti
1. IComparable sąsaja naudojama įgyvendinti natūraliausius tipų rūšiavimo ryšius, perkraunant keturis palyginimo operatorius ir pateikiant perkrautą CompareTo() metodo versiją, kad būtų galima priimti konkrečius tipus kaip parametrus. 2. IComparer yra naudojamas pateikti rūšiavimo ryšius, kurie skiriasi nuo IComparable, arba pateikti mums rūšiavimo ryšius, kad pats tipas sako nėra įgyvendintas.
27. Venkite "ICloneable" sąsajų
1. Reikšmių tipams nereikia palaikyti ICloneable sąsajos, tiesiog naudokite numatytąją priskyrimo operaciją; 2. Bazinėms klasėms, kurioms gali reikėti palaikyti ICloneable sąsajas, joms turėtų būti sukurtas apsaugotas replikacijos konstruktorius ir IConeable sąsajų turėtų būti vengiama.
28. Venkite priverstinio konvertavimo operatorių
Naudojant konstruktorius, o ne konvertavimo operatorius, konvertavimo darbas gali būti aiškesnis, o tai gali lengvai sukelti keistų klaidų dėl laikinų objektų, naudojamų po konvertavimo.
29. Apsvarstykite galimybę naudoti naują modifikatorių tik tada, kai naujų versijų kaupimas sukelia problemų
30. Kiek įmanoma įdiekite su CLS suderinamus mazgus 1. Norint sukurti suderinamą agregatą, reikia laikytis dviejų taisyklių: parametrai ir grąžinamųjų verčių tipai, kuriuos naudoja visi vieši ir saugomi asamblėjos nariai, turi būti suderinami su CLS; Bet kuris viešas ir saugomas narys, nesuderinamas su CLS, turi turėti su CLS suderinamą alternatyvą; 2. Galite apeiti CLS suderinamumo tipo patikrą aiškiai įdiegdami sąsają, o CLSCompliantAttribute netikrins privačių narių CLS suderinamumo.
31. Kiek įmanoma įgyvendinkite trumpą ir glaustą metodą
1. JTG sudarytojas kaupia metodų vienetais, o metodai, kurie nėra iškviesti, JTG nesudarys; 2. Jei ilgesnio jungiklio bylos pareiškimo kodas pakeičiamas vienu metodu vienu metu, JTG kompiliatoriaus sutaupytas laikas bus padaugintas; 3. Trumpi ir glausti metodai ir pasirinkus mažiau vietinių kintamųjų galima gauti optimizuotą registro naudojimą; 4. Kuo mažiau metodo kontrolės šakų, tuo lengviau JTG sudarytojui sudėti kintamuosius į registrus.
32. Kiek įmanoma realizuokite mažo dydžio ir didelio darnumo mazgus
1. Įdėkite visas viešąsias klases ir bendrąsias bazines klases į kai kuriuos rinkinius, įdėkite įrankių klases, teikiančias funkcijas viešosioms klasėms, į tą patį rinkinį, supakuokite atitinkamas viešąsias sąsajas į savo rinkinius ir galiausiai apdorokite klases, kurios yra visoje horizontalioje programos padėtyje; 2. Iš esmės turėtų būti sukurti dviejų tipų komponentai: vienas yra mažas ir agreguotas mazgas, turintis konkrečią funkciją, o kitas - didelis ir platus mazgas, turintis bendras funkcijas.
33. Apribokite tipų matomumą
1. Naudojant sąsajas tipų funkcijoms atskleisti, mums gali būti lengviau kurti vidines klases, neribojant jų prieinamumo už asamblėjos ribų; 2. Kuo mažiau viešųjų tipų yra veikiami išorinio pasaulio, tuo daugiau galimybių ateityje plėstis ir keisti įgyvendinimą.
34. Sukurkite didelės apimties žiniatinklio API
Tai sumažina operacijų tarp įrenginių dažnumą ir apkrovą, serveryje perkelia dideles operacijas ir smulkius vykdymus.
35. Perrašymas yra geriau nei įvykių procesoriai
1. Jei įvykių procesorius pateikia išimtį, kiti įvykių grandinės procesoriai nebus iškviesti, tačiau tai neatsitiks perrašytam virtualiam metodui. 2. Perrašymas yra daug efektyvesnis nei asociatyvūs įvykių procesoriai, kurie turi kartoti visą užklausų sąrašą, o tai užima daugiau procesoriaus laiko. 3. Į įvykius galima reaguoti vykdymo metu, lanksčiau, o keli atsakymai gali būti susieti su tuo pačiu įvykiu. 4. Bendra taisyklė yra susidoroti su išvestiniu įvykiu, o perrašymo metodas yra geresnis.
36. Sąžiningas naudojimas. .NET vykdymo laiko diagnostika
1. System.Diagnostics.Debug\Trace\EventLog pateikia visus įrankius, reikalingus programai pridėti diagnostikos informaciją prie vykdymo laiko, o programa gali rašyti į sistemos įvykių žurnalą, kai EventLog pateikia sudedamąją dalį; 2. Galiausiai, nerašykite savo diagnostikos bibliotekos, .NET FCL jau turi mums reikalingą pagrindinę biblioteką.
37. Naudokite standartinius konfigūracijos mechanizmus
1、. .NET sistemos System.Windows.Application klasė apibrėžia savybes, kad galėtume nustatyti bendrą konfigūracijos kelią; 2. Application.LocalAppDataPath ir Application.userDataPath sugeneruos vietinio duomenų katalogo ir vartotojo duomenų kelio pavadinimus; 3. Nerašykite duomenų į "ProgramFiles" ir "Windows" sistemos katalogus, šioms vietoms reikalingi didesni saugos leidimai, nesitikėkite, kad vartotojai turės rašymo leidimus.
38. Tinkinkite ir palaikykite duomenų susiejimą
1. Du "BindingMananger" ir "CurrencyManager" objektai realizuoja duomenų perdavimą tarp valdiklio ir duomenų šaltinio; 2. Duomenų susiejimo privalumai: naudoti duomenų susiejimą yra daug paprasčiau nei rašyti savo kodą; Jis turėtų būti naudojamas kitoms aprėptims nei teksto duomenų elementai - kitos rodymo ypatybės taip pat gali būti susietos; "Windowos Forms" duomenų susiejimams – galimybė tvarkyti kelių su tikrinimu susijusių duomenų šaltinių sinchronizavimą; 3. Kai objektas nepalaiko reikiamų atributų, galite palaikyti duomenų susiejimą užblokuodami esamą objektą ir pridėdami norimą objektą.
39. Naudojimas. .NET tikrinimas
1. ASP.NET yra penki valdikliai, skirti patikrinti galiojimą, ir galite naudoti "CustomValidator", kad išvestumėte naują klasę ir pridėtumėte savo autentifikavimo priemonę. 2. "Windows" patvirtinimui reikalinga posistemė.Windows.Forms.Control.Validating įvykių apdorojimo programai parašyti.
40. Pasirinkite tinkamą ** pagal poreikius
1. Masyvas turi du akivaizdžius defektus: jo negalima dinamiškai keisti; Dydžio keitimas užima daug laiko; 2. ArrayList sumaišo vienmatių masyvų ir susietų sąrašų charakteristikas, Queue ir Stack yra specialūs masyvai, pagrįsti masyvu; 3. Kai programa yra lankstesnė pridėti ir ištrinti elementus, ji gali padaryti patikimesnius tipus, o kuriant klasę, kuri imituoja **, ji turėtų įdiegti indeksatorius ir IE numeruojamas sąsajas.
41. Duomenų rinkinys yra geresnis nei pasirinktinė struktūra
1. Duomenų rinkiniai turi du trūkumus: sąveika tarp duomenų rinkinių naudojant XML serializavimo mechanizmą ir non-.NET kodo nėra labai gera; "DataSet" yra labai universalus konteineris; 2. Stiprūs duomenų rinkinių tipai pažeidžia daugiau dizaino taisyklių, o jų kūrimo efektyvumas yra daug didesnis nei elegantiškesnių dizainų.
42. Naudokite charakteristikas, kad supaprastintumėte refleksiją
Kurdami ir diegdami funkcijų klases, kurios verčia kūrėjus deklaruoti dinamiškai naudojamus tipus, metodus ir atributus, galite sumažinti programos vykdymo laiko klaidas ir pagerinti programinės įrangos vartotojų pasitenkinimą.
43. Venkite per daug naudoti refleksus
1. Invoke narių naudojami parametrai ir grąžinamos reikšmės yra System.Object, kuris konvertuoja tipus vykdymo metu, tačiau problemų tikimybė tapo labiau tikėtina. 2. Sąsaja leidžia mums gauti aiškesnę ir labiau prižiūrimą sistemą, o atspindys yra labai galingas vėlyvas įrišimo mechanizmas. .NET sistema ją naudoja "Windows" valdiklių ir žiniatinklio valdiklių duomenų susiejimui įgyvendinti.
44. Sukurkite konkrečias programos išimčių klases
1. Vienintelė priežastis, kodėl reikia skirtingų išimčių klasių, yra leisti vartotojams lengvai imtis skirtingų požiūrių į skirtingas klaidas rašant laimikio procesorius; 2. Kai gali būti skirtingas taisymo elgesys, turėtume sukurti įvairias skirtingas išimčių klases, pateikdami visus konstruktorius, kuriuos palaiko išimčių bazinė klasė, galime sukurti visiškai veikiančią programos išimčių klasę ir naudoti atributą InnerException, kad išsaugotume visą klaidų informaciją, sugeneruotą žemesnio lygio klaidų sąlygų.
45. Pirmenybę teikite neįprastoms saugos garantijoms
1. Stipri išimties garantija užtikrina geriausią pusiausvyrą tarp atkūrimo iš išimties ir supaprastinto išimčių tvarkymo, o programos būsena išlieka nepakitusi, kai operacija nutraukiama dėl išimties. 2. Atlikite gynybinį modifikuojamų duomenų kopijavimą, modifikuokite šių duomenų gynybinę kopiją, operacija viduryje gali sukelti išimtį, o laikina kopija ir originalus objektas bus pakeisti; 3. Terminatoriai, Dispose() metodai ir tiksliniai metodai, susieti su delegatais, turėtų užtikrinti, kad jie jokiomis aplinkybėmis nekeltų išimčių.
46. Sumažinkite sąveikumą
1. Yra trys sąveikumo sąnaudos: duomenų išvardijimo tarp valdomų ir nevaldomų krūvų išlaidos, perjungimo tarp valdomo kodo ir nevaldomo kodo išlaidos ir kūrėjų, dirbančių su hibridinėmis aplinkomis, kūrimo darbas; 2. Naudojant blittable tipą interoperacijoje, galima efektyviai replikuoti pirmyn ir atgal tarp valdomų ir nevaldomų aplinkų, nepaveikiant vidinės objekto struktūros. 3. Naudokite In/Out funkciją, kad užtikrintumėte tinkamiausius nereikalingus kelis replikavimus ir pagerintumėte našumą deklaruodami, kaip duomenys yra išvardyti. 4. Naudokite COM Interop, kad paprasčiausiu būdu įgyvendintumėte sąveiką su COM komponentais, naudokite P/Invoke, kad iškviestumėte Win32 API, arba naudokite C++ kompiliatoriaus /CLR jungiklį, kad sumaišytumėte valdomą ir nevaldomą kodą;
47. Pirmenybę teikite saugos kodams
1. Kiek įmanoma venkite prieigos prie nevaldomos atminties, o izoliuota saugykla negali užkirsti kelio prieigai prie valdomo kodo ir patikimų vartotojų. 2. Kai rinkiniai veikia žiniatinklyje, apsvarstykite galimybę naudoti izoliuotą saugyklą, o kai tam tikriems algoritmams reikia didesnių saugos leidimų, šie kodai turėtų būti izoliuoti atskirame rinkinyje.
48. Įsisavinkite atitinkamus įrankius ir išteklius
1. Naudokite NUnit automatiniams vienetų testams nustatyti (integruoti į VS2010); 2. FXCop įrankis gaus IL kodą rinkinyje, išanalizuos jį pagal nevienalytes kodavimo taisykles ir geriausią praktiką ir galiausiai praneš apie pažeidimą. 3. ILDasm yra IL išmontavimo įrankis, kuris gali padėti mums suprasti detales; 4. Shared Source CLI yra įgyvendinimo šaltinio kodas, kuriame yra .NET sistemos branduolys ir C# kompiliatorius. |