# Por que cada membro Dispose existe?

Caloni, 2025-11-14 dotnet <blogging> [up] [copy]

Tudo gira em torno da necessidade de gerenciar objetos não gerenciáveis, o que implica em um finalizer para que seja feito isso, e apenas isso. O finalizer não deve tocar em código gerenciado, e é por isso que existe um Boolean definindo se disposing será feito. Todo o resto do código do finalizer deve ser para liberação de recursos nativos.

O Dispose sem parâmetros é público e existe para ser chamado pelo usuário, direta ou indiretamente (using). Ele deve chamar o Dispose protegido passando o parâmetro disposing como true. Deve avisar o GC para não chamar o finalizer, já que não devemos chamar o Dispose protegido de novo. Isso deve ser feito mesmo que não exista um finalizer na classe, pois as classes base podem conter, agora ou no futuro. A Microsoft também recomenda porque pode ser que no futuro a própria classe tenha, o que parece tão gambiarrento quanto você imagina. Se ainda não te convenci, a Microsoft obriga por contrato (documentado) que você deve sempre desabilitar.

If your type implements IDisposable, Dispose() should always call GC.SuppressFinalize(this) even if the class has no finalizer.

No entanto, se a classe não tem recursos não gerenciados e está selada, ou seja, não haverá subclasse com finalizer, você pode adotar um pattern mais simples, sem Dispose(disposing), sem finalizer e portanto sem chamar GC.SupressFinalizer. E se sua classe não tem nenhum recurso disposable você ainda pode apenas implementar o Dispose público vazio.

Para evitar gerenciar recursos nativos você pode usar a classe SafeHandle, que como já lida com o finalizer internamente evita a necessidade da classe que usa chamar a supressão.

O Dispose protegido faz a deslocação de recursos de fato, gerenciado, se disposing for true, e não gerenciado sempre. Para os gerenciados ele chama o método Dispose. Por fim, se houver um finalizer, ele chama o Dispose protegido com disposing como false, pois os objetos gerenciados podem já ter sido finalizados e resta os não gerenciados.


# O Senhor dos Anéis: A Sociedade do Anel

Caloni, 2025-11-21 <movies> [up] [copy]

Reassistir depois de mais de uma década fez o filme envelhecer no bom sentido: não parece em nada com os filmes atuais. Tem pelo menos umas sete cenas de tirar o fôlego. O CGI é datado, mas permanece quase impecável (como 2001: Uma Odisseia no Espaço). Mantém ainda a tradição das grandes produções de Hollywood, embora já estejamos no novo século. Não há praticamente nada que eu não me lembrava desde a primeira vez que vi no cinema. É um dos filmes que deixa a sua mensagem tão poderosa e perene que fica para sempre. O que muda ao reassistir é o espectador. Hoje percebo mais as partes maduras da saga, especialmente sobre política e valores. É um filme que tem uma alma vibrante e solene, um estilo próprio que define de maneira exemplar como se faz filme de quest.


# O Senhor dos Anéis: As Duas Torres

Caloni, 2025-11-21 <movies [up] [copy]

É um vídeo game de três horas que move lentamente uma história já iniciada. É sobre alianças, lealdade e esperança. E sobre cenas de batalha que irão novamente te deixar sem fôlego por um tempo. Uma senhora prévia de O Retorno do Rei com sua batalha mais épica já filmada no cinema. Ele é claramente inferior ao início da trilogia, mas cumpre seu papel de investir tempo e energia em direção ao terceiro ato, além de contar com alguns momentos inesquecíveis do Cinema, como o monólogo da criatura Gollum e uma das melhores interpretações sem a captura do rosto do ator (Andy Serkis).


# Ser programador (Wanderley Caloni)

Caloni, 2025-11-22 <quotes> [up] [copy]
Tratar cada novo código com tanta seriedade como se fosse a última versão é descartar a alegria e virtude de ser um programador.
Não é sobre funcionar, mas descobrir como as coisas não funcionam.

[2025-10] [2025-12]