domingo, 13 de julho de 2008

C# (CSharp) - Características

C# (pronuncia-se "cê chárp" em português ou "sí sharp" para o inglês) é, de certa forma, a linguagem de programação que mais diretamente reflete a plataforma .NET sobre a qual todos os programas .NET executam. C# está de tal forma ligado a esta plataforma que não existe o conceito de código não-gerenciado (unmanaged code) em C#. Suas estruturas de dados primitivas são objetos que correspondem a tipos em .NET. A desalocação automática de memória por garbage colletor além de várias de suas abstrações tais como classes, interfaces, delegados e exceções são nada mais que a exposição explicita recursos do ambiente .NET.

Quando comparada com C e C++, a linguagem é restrita e melhorada de várias formas incluindo:

  • Ponteiros e aritmética sem checagem só podem ser utilizados em uma modalidade especial chamada modo inseguro (unsafe mode). Normalmente os acessos a objetos são realizados através de referências seguras, as quais não podem ser invalidadas e normalmente as operações aritméticas são checadas contra sobrecarga (overflow).
  • Objetos não são liberados explicitamente, mas através de um processo de coleta de lixo (garbage collector) quando não há referências aos mesmos, previnindo assim referências inválidas.
  • Destrutores não existem. O equivalente mais próximo é a interface Disposable, que juntamente com a construção using block permitem que recursos alocados por um objeto sejam liberados prontamente. Também existem finalizadores, mas como em Java sua execução não é imediata.
  • Como no Java, não é permitida herança múltipla, mas uma classe pode implementar várias interfaces abstratas. O objetivo principal é simplificar a implementação do ambiente de execução.
  • C# é mais seguro com tipos que C++. As únicas conversões implícitas por default são conversões seguras, tais como ampliação de inteiros e conversões de um tipo derivado para um tipo base. Não existem conversões implícitas entre inteiros e variáveis lógicas ou enumerações. Não existem ponteiros nulos (void pointers) (apesar de referências para Object serem parecidas). E qualquer conversão implícita definida pelo usuário deve ser marcada explicitamente, diferentemente dos construtores de cópia de C++.
  • A sintaxe para a declaração de vetores é diferente ("int[] a = new int[5]" ao invés de "int a[5]").
  • Membros de enumeração são colocados em seu próprio espaço de nomes (namespace)
  • C# não possui modelos (templates), mas C# 2.0 possui genéricos (generics).
  • Propriedades estão disponíveis, as quais permitem que métodos sejam chamados com a mesma sintaxe de acesso a membros de dados.
  • Recursos de reflexão completos estão disponíveis

Apesar de C# ser freqüentemente tido como similar a Java, existem uma série de diferenças importantes, mas a maioria é implementada de forma diferenciada em ambas as linguagens.

Por exemplo, o Java não implemente propriedades, mas permite a utilização de métodos Get e Set que realizam o mesmo processo.

Outros detalhes são:

  • O Java não implementa o goto como estrutura de controle, mas o C# sim, apesar de ser pouco usual.
  • O Java utiliza comentários Javadoc e o C# utiliza comentários baseados em XML.
  • O C# possui indexadores. O Java tem Listeners.
  • O Java utiliza a JVM, o C# o .Net Framework, Mono e DotGnu.
  • Um dos principais editores do Java é o Eclipse, o do C# é o Visual Studio. Mas ambos tem compiladores de linha de comando.
  • O Java pode ser compilado em qualquer plataforma, o C# possui compiladores para Windows, Windows Mobile, Linux, Mac OS X e Solaris. A plataforma .Net da Microsoft provê compiladores para Windows e Windows Mobile (.Net Compact Framework), já a plataforma Mono provê compiladores para Windows, Linux, Mac OS X e Solaris.

No final, ambos possuem recursos similares, sendo possível o programador escolher a linguagem com a qual mais simpatiza.

Nenhum comentário: