MVVMCrossの「MVXConvertingTargetBinding」は、ヌル値と変換の堅牢な処理を確実にするいくつかの重要な機能を実装することにより、ヌル参照例外を防ぐように設計されています。そのような例外を防ぐのに役立つ方法は次のとおりです。
1。ベースクラス構造:「MVXConvertingTargetBinding」は、バインディングの取り扱いの基盤を提供する「MVXTARGETBINDI」から継承します。この基本クラスには、ターゲットオブジェクトを管理し、イベントを処理するためのメカニズムが含まれています。これには、ヌル参照のチェックが本質的に含まれます。
2。ターゲットへの弱者:「mvxConvertingTargetBinding」から派生する「mvxtargetbinding」クラスは、ターゲットオブジェクトを保持するために「weakReference」を使用します。このアプローチは、メモリの漏れを防ぎ、必要に応じてターゲットオブジェクトをガベージに収集できるようにするのに役立ちます。ヌル参照の例外を直接防ぐことはありませんが、オブジェクトの寿命を管理するのに役立ち、予期しないヌルの可能性が減ります。
3. Virtual Methods for Skipping SetValue: `MvxConvertingTargetBinding` provides virtual methods like `ShouldSkipSetValueForViewSpecificReasons()` and `ShouldSkipSetValueForPlatformSpecificReasons()`.これらの方法により、開発者は、特定の条件が満たされている場合に値の設定をスキップできるロジックを実装でき、ヌル値が問題を引き起こす可能性のあるシナリオを避ける可能性があります。
4。コンバーターサポート:「MVXConvertingTargetBinding」の主要な機能は、ソースとターゲット間の値を変換するために使用されるコンバーターをサポートすることです。コンバーター自体は本質的にヌル参照の例外を防ぐことはできませんが、ヌル値を優雅に処理するように設計できます。たとえば、コンバーターは、入力がnullの場合、デフォルト値または空の文字列を返す場合があります。
5。イベント処理:双方向のバインディングでは、 `mvxConvertingTargetBinding`イベントを処理して、ターゲットが変更されたときにソースを更新します。イベントハンドラーが適切に添付され、分離されることが保証されます。これにより、NULLオブジェクトのメソッドを呼び出す試みを回避することにより、NULL参照の例外を防ぐことができます。
6.防御プログラミングの実践:「MVXConvertingTargetBinding」クラス自体の一部ではありませんが、このクラスを使用する開発者は、防御的なプログラミングプラクティスに従うことをお勧めします。これには、使用を試みる前にヌル参照をチェックすることが含まれます。これは、ヌル参照の例外を防ぐために重要です。
要約すると、「MVXConvertingTargetBinding」は明示的なNULLチェックを介してNULL参照の例外を直接防止しませんが、バインディングと変換の堅牢な処理を促すフレームワークを提供し、そのような例外の可能性を減らします。開発者は、このクラスを使用してコードがNULL参照の例外に対して堅牢であることを確認する際に、NULLチェックと防御プログラミングプラクティスを実装する必要があります。
引用:[1] https://www.mvvmcross.com/documentation/advanced/custom-dataバインディング
[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
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceException?view=net-9.0