MVVMCross의`MVXConvertingTargetBinding`은 NULL 값 및 변환을 강력하게 처리하는 몇 가지 주요 기능을 구현하여 NULL 참조 예외를 방지하도록 설계되었습니다. 그러한 예외를 예방하는 데 도움이되는 방법은 다음과 같습니다.
1. 기본 클래스 구조 :`mvxConvertingTargetBinding '은`mvxtArgetBinding'의 상속을받습니다. 이 기본 클래스에는 대상 객체 관리 및 처리 이벤트를위한 메커니즘이 포함되어 있으며, 여기에는 본질적으로 NULL 참조 검사가 포함됩니다.
2. Target에 대한 약점 :`mvxtArgetBinding` 클래스는`mvxConvertingTargetBinding`가 파생 된 '약점'을 사용하여 대상 객체를 유지합니다. 이 접근법은 메모리 누출을 방지하고 필요한 경우 대상 물체를 수집 할 수 있도록합니다. Null 참조 예외를 직접 방지하지는 않지만 객체 수명을 관리하여 예상치 못한 널의 가능성을 줄이는 데 도움이됩니다.
3. setValue를 건너기위한 가상 메소드 :`mvxConvertingTargetBinding`은`dustskipsetValueForviewSpecificrissons ()`및`theThskipSetValueForPlatformspecificrrissouss ()와 같은 가상 메소드를 제공합니다. 이러한 방법을 사용하면 개발자가 특정 조건이 충족되면 값 설정을 건너 뛸 수있는 논리를 구현할 수 있으며, 널 값이 문제를 일으킬 수있는 시나리오를 피할 수 있습니다.
4. 컨버터 지원 :`mvxConvertingTargetBinding`의 주요 기능은 소스와 대상 사이의 값을 변환하는 데 사용되는 변환기를 지원하는 것입니다. 변환기 자체는 본질적으로 NULL 참조 예외를 방지하지는 않지만 NULL 값을 우아하게 처리하도록 설계 될 수 있습니다. 예를 들어, 입력이 null 인 경우 변환기가 기본값 또는 빈 문자열을 반환 할 수 있습니다.
5. 이벤트 처리 : 양방향 바인딩에서`mvxConvertingTargetBinding`은 이벤트를 처리하여 대상이 변경 될 때 소스를 업데이트합니다. 이벤트 핸들러가 올바르게 첨부되고 분리되도록하여 NULL 객체에서 메소드를 호출하려는 시도를 피함으로써 NULL 참조 예외를 방지하는 데 도움이됩니다.
6. 방어 프로그래밍 관행 : 'MVXConvertingTargetBinding'클래스 자체의 명시 적 부분은 아니지만이 클래스를 사용하는 개발자는 방어 프로그래밍 관행을 따르도록 권장됩니다. 여기에는 사용을 시도하기 전에 NULL 참조를 확인하는 것이 포함되며, 이는 NULL 참조 예외를 방지하는 데 중요합니다.
요약하면,`mvxConvertingTargetBinding`은 명시적인 NULL 검사를 통해 NULL 참조 예외를 직접 방지하지는 않지만 바인딩 및 변환의 강력한 처리를 장려하여 그러한 예외의 가능성을 줄이는 프레임 워크를 제공합니다. 개발자는이 클래스를 사용할 때 NULL 검사 및 방어 프로그래밍 관행을 구현하여 코드가 NULL 참조 예외에 대해 강력한 지 확인해야합니다.
인용 :[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-initalization-of-target
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullreferenceexception?view=net-9.0