
Clique aqui para ler todos os artigos desta edição
Chamada a todos os operadores
por Ken Getz
|
Este artigo discute |
Este artigo usa as seguintes tecnologias: |
|
· Dicas e truques com operadores |
Visual Basic. Net e C# Download: |
|
Chapéu Operadores |
|
Este mês encontrei uma pergunta interessante em minha caixa de correio. Era algo assim: "Estou escrevendo um código que trabalha com pontos e outros objetos de desenho
Para definir o contexto, vale a pena criar algum código no Visual Studio® .NET 2003 para ver qual será o comportamento, antes de tentar uma solução (se você tentar isso no Visual Studio 2005, as coisas serão ligeiramente diferentes). Abra o Visual Basic .NET 2003, crie um novo aplicativo do Windows®, coloque um botão sobre o formulário, dê um duplo clique para entrar no code designer e acrescente o seguinte código ao handler de evento de Click do botão:
Dim pt As New Point(0, 0)
pt += New Size(10, 10)
Ele não compila, não é? Só por diversão, experimente fazer a mesma coisa, mas dessa vez escrevendo o código em C#:
Point pt = new Point(0, 0);
pt += new Size(10, 10);
Compilou corretamente, não foi? Eu poderia falar muito sobre por que funciona em C# e por que não funciona
Se você analisar um pouco, concordará que qualquer operador, até mesmo os operadores simples + e - trabalhando com inteiros, são apenas uma convenções tipográficas para métodos. Por exemplo, ao somar dois inteiros, em vez de escrever o código desta maneira
Dim x As Integer = a + b
você poderia imaginar que, nos bastidores, o computador está gerando um código como este:
Dim x As Integer = Int32.Add(a, b)
Desde que o operador seja definido pelo compilador, o Visual Basic 2002 e o Visual Basic 2003 se dão bem com isso. Por exemplo, você já pensou em usar o operador + com strings? Embora a maioria dos desenvolvedores não escreva códigos como este, é perfeitamente aceitável e funciona muito bem:
Dim str1 As String = "Hello, "
Dim str2 As String = "there"
Dim str3 As String = str1 + str2
Nos bastidores, o operador "+" com strings foi sobrecarregado para chamar o método String.Concat, convertendo aquela linha final do código em algo como:
Dim str3 As String = String.Concat(str1, str2)
Acredito que maioria das pessoas nem mesmo pensa nessas coisas, porque tudo é feito automaticamente pelo compilador, e isto torna as classes envolvidas mais intuitivas.
Agora vamos voltar à questão original. Como o C# suportava a sobrecarga de operadores desde o começo, e como há um procedimento escondido em algum lugar do código da estrutura do Point que sobrecarrega o operador + e aceita um Point e um Size como parâmetros, os desenvolvedores em C# podem usar o operador + para adicionar estruturas Point e Size, o que resulta em um novo Point em um novo local. Então, os desenvolvedores que usam o Visual Basic estarão na chuva se quiserem adicionar um Point e um Size? Não é bem assim.
Quando se usa o operador + na estrutura do Point