Az MvxConvertingTargetBinding` in mvvmcross -ban úgy tervezték, hogy megakadályozza a null referencia -kivételeket olyan kulcsfontosságú funkciók bevezetésével, amelyek biztosítják a nulla értékek és a konverziók robusztus kezelését. Így segít megelőzni az ilyen kivételeket:
1. alaposztály -felépítés: `mvxConvertingTargetBinding` öröklik a` mvxtargetBinding '-ből, amely alapot nyújt a kötések kezeléséhez. Ez az alaposztály magában foglalja a célobjektum kezelésének és az események kezelésének mechanizmusait, amelyek magában foglalják a null referenciák ellenőrzését.
2. A célhoz való gyengeség: A „mvxtArgetBinding” osztály, amelyből az `mvxConvertingTargetBinding` származik, a „gyenge referenciát” használja a célobjektum megtartására. Ez a megközelítés elősegíti a memória szivárgásainak megakadályozását, és biztosítja, hogy a célobjektum szükség esetén összegyűjtse a szemetet. Noha ez nem akadályozza meg közvetlenül a null referencia -kivételeket, elősegíti az objektum élettartamának kezelését, csökkentve a váratlan nullák valószínűségét.
3. Virtuális módszerek a setValue átugrására: `mvxConvertingTargetBinding` olyan virtuális módszereket biztosít, mint a` swoutskipsetValueforViewSpecificreSons () `és a` shakskipsetValueforplatformSpecificreSons () `. Ezek a módszerek lehetővé teszik a fejlesztők számára, hogy olyan logikát hajtsanak végre, amely kihagyhatja az érték beállítását, ha bizonyos feltételek teljesülnek, potenciálisan elkerülve a forgatókönyveket, ahol a null értékek problémákat okozhatnak.
4. Konverter támogatása: Az „MvxConvertingTargetBinding” elsődleges funkciója az átalakítók támogatása, amelyeket a forrás és a cél közötti értékek átalakítására használnak. Noha a konverterek maguk nem akadályozzák meg a null referencia -kivételeket, úgy lehet megtervezni, hogy kecsesen kezeljék a null értékeket. Például egy konverter visszaadhat egy alapértelmezett értéket vagy egy üres karakterláncot, ha a bemenet null.
5. Eseménykezelés: Kétirányú kötésekben a „MvxConvertingTargetBinding” az eseményeket kezeli a forrás frissítéséhez, amikor a cél megváltozik. Biztosítja, hogy az eseménykezelők megfelelően rögzítsék és leválasztják, ami elősegíti a null referencia -kivételek megakadályozását azáltal, hogy elkerüli a null objektumok módszereinek meghívására irányuló kísérleteket.
6. védekező programozási gyakorlatok: Noha maga nem része az MVXConvertingTargetBinding osztálynak, az osztályt használó fejlesztőket arra ösztönzik, hogy kövessék a védekező programozási gyakorlatokat. Ez magában foglalja a null referenciák ellenőrzését, mielőtt megpróbálnánk felhasználni, ami elengedhetetlen a null referencia -kivételek megelőzésében.
Összefoglalva: míg az „MvxConvertingTargetBinding” nem akadályozza meg közvetlenül a null referencia -kivételeket az explicit null -ellenőrzések révén, ez olyan keretet biztosít, amely ösztönzi a kötések és a konverziók robusztus kezelését, csökkentve az ilyen kivételek valószínűségét. A fejlesztőknek továbbra is null -ellenőrzéseket és védekező programozási gyakorlatokat kell végrehajtaniuk, amikor ezt az osztályt használják annak biztosítása érdekében, hogy kódjuk robusztus legyen a null referencia -kivételekkel szemben.
Idézetek:[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-et
[5] https://www.christianfindlay.com/blog/stop-nullreferenceExceptions
[6] https://github.com/whitphx/vscode-emacs-mcx
[7] https://stackoverflow.com/questions/63497549/binding-onaytoSource-with-onetime-titalization-of-target
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceException?view=net-9.0