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:
Postar um comentário