`MVXConvertingTargetBinding` în MVVMCross este conceput pentru a preveni excepțiile de referință nule prin implementarea mai multor caracteristici cheie care asigură o gestionare robustă a valorilor și conversiei nule. Iată cum ajută la prevenirea unor astfel de excepții:
1. Structura clasei de bază: `mvxconvertingTargetBinding` moștenește de la` mvxTargetBinding`, care oferă o bază pentru manipularea legăturilor. Această clasă de bază include mecanisme de gestionare a obiectelor țintă și de manipulare a evenimentelor, care implică în mod inerent verificări pentru referințe nule.
2.. Referință slabă la țintă: clasa `mvxTargetBinding`, din care derivă` mvxConvertingTargetBinding`, folosește un `slabeReference` pentru a ține obiectul țintă. Această abordare ajută la prevenirea scurgerilor de memorie și asigură că obiectul țintă poate fi colectat de gunoi, dacă este necesar. Deși nu împiedică în mod direct excepțiile de referință nulă, ajută la gestionarea duratei de viață a obiectului, reducând probabilitatea de nule neașteptate.
.. Metode virtuale pentru sărituri setValue: `MVXConvertingTargetBinding` oferă metode virtuale precum` ar trebuiskipsetValueForviewspecificReasons () `și` ar trebuiskipsetvalueForplatformSpecificReasons () `. Aceste metode permit dezvoltatorilor să implementeze o logică care poate sări setarea unei valori dacă sunt îndeplinite anumite condiții, evitând scenarii în care valorile nule ar putea provoca probleme.
4. Suport convertor: Funcția principală a `MVXConvertingTargetBinding` este de a suporta convertoarele, care sunt utilizate pentru a transforma valorile între sursă și țintă. În timp ce convertoarele în sine nu împiedică în mod inerent excepțiile de referință nulă, ele pot fi proiectate pentru a gestiona cu grație valorile nule. De exemplu, un convertor ar putea returna o valoare implicită sau un șir gol dacă intrarea este nulă.
5. Manevrarea evenimentelor: în legături în două sensuri, `MVXConvertingTargetBinding` gestionează evenimentele pentru a actualiza sursa atunci când ținta se schimbă. Se asigură că manipulatorii de evenimente sunt atașate și detașate în mod corespunzător, ceea ce ajută la prevenirea excepțiilor de referință nulă, evitând încercările de a invoca metode pe obiecte nule.
6. Practici de programare defensivă: Deși nu face parte explicit din clasa `MVXConvertingTargetBinding` în sine, dezvoltatorii care folosesc această clasă sunt încurajați să urmeze practicile de programare defensivă. Aceasta include verificarea referințelor nule înainte de a încerca să le utilizeze, ceea ce este crucial în prevenirea excepțiilor de referință nulă.
În rezumat, în timp ce `MVXConvertingTargetBinding` nu împiedică în mod direct excepțiile de referință nule prin verificări nule explicite, oferă un cadru care încurajează gestionarea robustă a legăturilor și conversiilor, reducând probabilitatea unor astfel de excepții. Dezvoltatorii ar trebui să implementeze în continuare verificări nule și practici de programare defensivă atunci când utilizează această clasă pentru a se asigura că codul lor este robust împotriva excepțiilor de referință nule.
Citări:[1] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[2] http://mcx.space/wiki/index.cgi?doc%2freadme
[3] https://rubberduckvba.blog/2020/10/25/making-mvvm-work-in-vba-part-3-bindings/
[4] https://blog.postsharp.net/nullreferencexception-object-reference-nut-set
[5] https://www.christianfindlay.com/blog/stop-nullreferencexceptions
[6] https://github.com/whitphx/vscode-emacs-mcx
[7] https://stackoverflow.com/questions/63497549/binding-onewaytosource-with-onetime-initalization-of-target
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceException?view=net-9.0