Welcome to GASP Sign in | Join | Help

Paulo Morgado

Tudo sobre Arquitectura de Software

Localização dos Visitantes

  • Localização dos Visitantes

Livros

  • LINQ com C#

Eventos

Renûncia

As opiniões e pontos de vista expressos neste sítio são minhas e podem não reflectir as da Microsoft, do meu empregador, ou de qualquer comunidade a que pertença. Qualquer código ou opinião é oferecido sem qualquer garantia. Os produtos ou serviços mencionados são comprados por mim, disponibilizados pelo meu empregador ou pelo fabricante/vendedor o que não influencia em nada a minha opinião.

Obtendo O Código Hash De Uma String Do CLR .NET 1.1 Usando O CLR .NET 2.0

Todos sabemos (ou deveríamos saber) que os valores obtidos do método GetHashCode não devem ser persistidos para uso posterior, especialmente com strings, porque:

O comportamento de GetHashCode é dependente da sua implementação, que pode variar de uma versão do Common Language Runtime para para outra. A razão porque isto pode acontecer pode ser para melhorar a performance de GetHashCode. [^]

No entanto, código que persiste valores obtidos do método GetHashCode para uso posterior pode cair no nosso colo. E se for necessário actualizar o nosso código para, por exemplo, usar WCF ou WF, temos um problema.

A solução seria usar o Reflector para ver como isto é feito no CLR 1.1 e implementar o mesmo algoritmo no CLR 2.0.

Infelizmente, a implementação no 1.1 é em código nativo.

Hoje, graças à Nicole, encontrei a classe System.Collections.Specialized.BackCompatibleStringComparer no CLR 2.0. Esta classe implementa o algoritmo  do String.GetHashCode do CLR 1.1 e pode ser encontrado nas assemblies System.dll e System.Windows.Forms.dll. Não podemos usá-lo porque é interno, mas podemos usar o Reflector para ver a sua implementação. Também pode ser encontrado aqui.

Agora tenho algumas questões:

  • Porque é que esta classe está replicada em duas assemblies?
  • Porque é que está a ser usada na classe DataObject?
  • Porque é que é interna?
  • Porque é que está a ser usada na Enterprise Library? [^][^]
Posted: Friday, May 30, 2008 1:23 AM by Paulo Morgado
Anonymous comments are disabled