`MvxConvertingTargetBinding` em mvvmcross foi projetado para evitar exceções de referência nula, implementando vários recursos -chave que garantem um manuseio robusto de valores e conversões nulas. Veja como isso ajuda a evitar tais exceções:
1. Estrutura da classe base: `mvxConvertingTargetBinding` herda do` mvxtargetBinding`, que fornece uma base para o manuseio de ligações. Esta classe base inclui mecanismos para gerenciar o objeto de destino e o manuseio de eventos, que envolvem inerentemente verificações para referências nulas.
2. Referência fraca ao alvo: a classe `mvxtargetBinding`, da qual deriva` mvxConvertingTargetBinding`, usa uma 'frA fradReference` para segurar o objeto de destino. Essa abordagem ajuda a evitar vazamentos de memória e garante que o objeto de destino possa ser coletado de lixo, se necessário. Embora não impeça diretamente exceções de referência nula, ajuda a gerenciar a vida útil do objeto, reduzindo a probabilidade de nulos inesperados.
3. Métodos virtuais para pular o setValue: `mvxConConvertingTargetBinding` fornece métodos virtuais como` deveskipsetValueForViewSpecificReasons () `e` deveskipsetValueForPlAtformSpecificReasons () `. Esses métodos permitem que os desenvolvedores implementem a lógica que pode pular a definição de um valor se certas condições forem atendidas, potencialmente evitando cenários em que valores nulos podem causar problemas.
4. Suporte ao conversor: A função principal de `mvxConConvertingTargetBinding` é suportar conversores, que são usados para transformar valores entre a fonte e o destino. Embora os próprios conversores não impedam inerentemente exceções de referência nula, eles podem ser projetados para lidar com valores nulos com graciosidade. Por exemplo, um conversor pode retornar um valor padrão ou uma string vazia se a entrada for nula.
5. Manuseio de eventos: nas ligações bidirecionais, `mvxConConvertingTargetBinding 'lida com eventos para atualizar a fonte quando o destino mudar. Ele garante que os manipuladores de eventos sejam adequadamente anexados e desapegados, o que ajuda a evitar exceções de referência nula, evitando tentativas de invocar métodos em objetos nulos.
6. Práticas de programação defensiva: Embora não seja explicitamente parte da classe `MVXConvertingTargetBinding`, os desenvolvedores que usam esta classe são incentivados a seguir as práticas de programação defensiva. Isso inclui a verificação de referências nulas antes de tentar usá -las, o que é crucial na prevenção de exceções de referência nula.
Em resumo, embora o `mvxConvertingTargetBinding` não impeça diretamente exceções de referência nula por meio de verificações nulas explícitas, ele fornece uma estrutura que incentiva o manuseio robusto de ligações e conversões, reduzindo a probabilidade de tais exceções. Os desenvolvedores ainda devem implementar verificações nulas e práticas de programação defensiva ao usar essa classe para garantir que seu código seja robusto contra exceções de referência nula.
Citações:[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-enetime-initalization-of-target
[8] https://learn.microsoft.com/en-us/dotnet/api/system.nullReferenceException?View=net-9.0