`MvxConvertingTargetBinding` v mvvmcross je navržen tak, aby zabránil nulovým referenčním výjimkám implementací několika klíčových funkcí, které zajišťují robustní manipulaci s nulovou hodnotou a převody. Zde je to, jak to pomáhá předcházet takovým výjimkám:
1. Struktura základní třídy: `mvxConvertingTargetBinding` zdědí od` mvxtArgetBinding`, který poskytuje základ pro manipulační vazby. Tato základní třída obsahuje mechanismy pro správu cílového objektu a událostí manipulace, které ze své podstaty zahrnují kontroly nulových odkazů.
2. Slabéreference k cíli: Třída `mvxtArgetBinding`, z níž pochází` mvxConvertingTargetBinding`, používá k držení cílového objektu „slabéreference“. Tento přístup pomáhá předcházet úniku paměti a zajišťuje, že cílový objekt může být v případě potřeby shromážděn odpadky. Ačkoli to přímo nezabrání nulové referenční výjimky, pomáhá spravovat životnost objektů, což snižuje pravděpodobnost neočekávaných null.
3. Virtuální metody pro přeskakování setValue: `mvxConvertingTargetBinding` poskytuje virtuální metody jako` cousSkIpSetValueforViewSPecificRasons () `a` cousSkIpSetValueForplatformspecificRasons () `. Tyto metody umožňují vývojářům implementovat logiku, která může přeskočit nastavení hodnoty, pokud jsou splněny určité podmínky, a potenciálně se vyhnout scénářům, kde nulové hodnoty mohou způsobit problémy.
4. Podpora převodníku: Primární funkcí `mvxConvertingTargetBinding` je podpora převodníků, které se používají k transformaci hodnot mezi zdrojem a cílem. Zatímco samotné převaděče neodmyslitelně nezabraňují nulové referenční výjimky, mohou být navrženy tak, aby zvládly nulové hodnoty elegantně. Například převodník může vrátit výchozí hodnotu nebo prázdný řetězec, pokud je vstup NULL.
5. Zpracování událostí: V obousměrných vazbách „MvxConvertingTargetBinding“ zpracovává události a aktualizuje zdroj, když se cíl změní. Zajišťuje, že obsluhy událostí jsou správně připojeny a odděleny, což pomáhá předcházet nulovým referenčním výjimkám tím, že se zabrání pokusům vyvolat metody na nulové objekty.
6. Defenzivní programovací postupy: Ačkoli není výslovně součástí samotné třídy „MVXConvertingTargetBinding“, vývojáři používající tuto třídu jsou vyzváni, aby dodržovali defenzivní programovací postupy. To zahrnuje kontrolu nulových odkazů před pokusem o jejich použití, což je zásadní při prevenci nulových referenčních výjimek.
Stručně řečeno, zatímco „mvxConvertingTargetBinding“ přímo nezabrání výjimkám s nulovou referencí prostřednictvím explicitních nulových kontrol, poskytuje rámec, který podporuje robustní zacházení s vazbami a konverzemi, což snižuje pravděpodobnost takových výjimek. Vývojáři by měli při používání této třídy stále implementovat nulové kontroly a defenzivní programovací postupy, aby se zajistilo, že jejich kód je robustní vůči nulové referenční výjimky.
Citace:[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-set
[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-onetime initalizace-target
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceException?view=net-9.0