sábado, 17 de março de 2007

TypeCast e Conversão

Surgiu uma dúvida num grupo de discussão sobre o assunto e resolvi falar sobre a diferença entre TypeCast e Conversão de tipos.

Conversão de tipos ocorre quando você tem um valor de um determinado tipo e deseja convertê-lo para outro tipo. Por exemplo, você tem uma string e deseja convertê-la para um número.

Já o TypeCast ocorre quando você tem um valor de um tipo, mas está sendo tratado como um tipo superior. Por exemplo, alguns controles de uma página web possuem o método FindControl, para o qual você passa o nome de um controle da página e retorna um referência para o controle. Por ser um método que irá funcionar para qualquer tipo de controle, ele irá retornar um objeto do tipo Control. Na verdade ele irá retornar algum objeto que herda de Control. Para usar o objeto retornado , você terá que especificar qual é o tipo desejado:

Button btn = (Button) FindControl("btnConfirmar");

O Nome da classe entre parênteses indica que você sabe que o retorno será um Button (Se não ocorrerá um exceção).

Para exemplificar a diferença entre eles, vamos supor que temos um DataRow "dr" com um campo "Codigo". Podemos obter o valor desse campo de duas formas:

int codigo = (int) dr["Codigo"];
int codigo = Convert.ToInt32(dr["Codigo"]);

Na primeira opção, não é feita nenhuma conversão de tipos, apenas o TypeCast. Se o campo "Codigo" não for do tipo int, será gerado um erro. Mesmo se for outro tipo inteiro como short, por exemplo. Já a segunda opção, efetua a conversão do valor do campo para Inteiro. Só ocorreria erro aqui se o conteúdo do campo fosse algo que não pudesse mesmo ser convertido, como a string "João", por exemplo.

Qual é melhor utilizar? Se o campo já for int, use TypeCast, caso contrário, use a conversão.

Nenhum comentário: