`MVXConvertingTargetBinding` v MVVMCross je navrhnutý tak, aby zabránil nulovým referenčným výnimkám implementáciou niekoľkých kľúčových funkcií, ktoré zabezpečujú robustné spracovanie nulových hodnôt a konverzií. Takto to pomáha predchádzať týmto výnimkám:
1. Štruktúra základnej triedy: `MVXConvertingTargetBinding` zdedí od` mvxTargetBinding`, ktorý poskytuje základ pre manipuláciu s väzbami. Táto základná trieda obsahuje mechanizmy riadenia cieľového objektu a udalostí zaobchádzania s manipuláciou, ktoré vo svojej podstate zahŕňajú kontroly nulových odkazov.
2. Slabáreferencia k cieľu: trieda `mvxTargetBinding`, z ktorej odvodzuje` mvxConvertingTargetBinding`, používa na udržanie cieľového objektu `slaboReference`. Tento prístup pomáha predchádzať úniku pamäte a zaisťuje, že cieľovým objektom môže byť v prípade potreby zbieraný odpad. Aj keď to priamo nezabráni nulovému referenčnému výnimkám, pomáha riadiť životnosť objektu, čím sa zníži pravdepodobnosť neočakávaných nulov.
3. Virtuálne metódy na preskočenie SetValue: `MVXConvertingTargetBinding` poskytuje virtuálne metódy, ako je` miskipsetValueforViewspecificReAsons () `a` miskipsetValueforplatforplatFaterSpecificReAsons () `. Tieto metódy umožňujú vývojárom implementovať logiku, ktorá môže preskočiť nastavenie hodnoty, ak sú splnené určité podmienky, čo sa potenciálne vyhýba scenára, v ktorých by hodnoty nuly mohli spôsobiť problémy.
4. Podpora prevodníka: Primárna funkcia `MVXConvertingTargetBinding` je podporovať prevodníky, ktoré sa používajú na transformáciu hodnôt medzi zdrojom a cieľom. Zatiaľ čo samotné konvertory neodmyslili nulové referenčné výnimky, môžu byť navrhnuté tak, aby elegantne zvládli nulové hodnoty. Napríklad prevodník môže vrátiť predvolenú hodnotu alebo prázdny reťazec, ak je vstup null.
5. Manipulácia s udalosťami: V obojsmerných väzbách `MVXConvertingTargetBinding 'rieši udalosti, aby aktualizoval zdroj, keď sa cieľ zmení. Zaisťuje, že obsluhy udalostí sú správne pripojení a oddelení, čo pomáha predchádzať nulovým referenčným výnimkám tým, že sa vyhýba pokusom vyvolať metódy na nulové objekty.
6. Obranné programovacie postupy: Aj keď nie sú výslovne súčasťou samotnej triedy „MVXConvertingTargetBinding“, vývojári používajúci túto triedu sa vyzývajú, aby sa riadili obrannými programovacími postupmi. Zahŕňa to kontrolu nulových referencií pred pokusom o ich použitie, čo je rozhodujúce pri prevencii nulových referenčných výnimiek.
Stručne povedané, zatiaľ čo „MVXConvertingTargetBinding“ priamo nezabráni nulovým referenčným výnimkám prostredníctvom explicitných kontrol nulových kontrol, poskytuje rámec, ktorý podporuje robustné zaobchádzanie s väzbami a konverziami, čím sa znižuje pravdepodobnosť takýchto výnimiek. Vývojári by mali pri používaní tejto triedy stále implementovať kontroly s nulami a obranné programovacie postupy, aby sa zabezpečilo, že ich kód je robustný na základe nulových referenčných výnimiek.
Citácie:[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/NullreferenceException-object-reference-not-tset
[5] https://www.christianfindlay.com/blog/stop-nullreferenceExceptions
[6] https://github.com/whitphx/vscode-emacs-mcx
[7] https://stackoverflow.com/questions/63497549/binding-onewaytosource-with-fotime-initalization-of-target
[8] https://learn.microsoft.com/en-us/dotnet/api/system.NullReferenceException?View=net-9.0