e Java.A criacao da linguagem, embora tenha sido feita por varios programadores, e atribuida principalmente a Anders Hejlsberg, hoje um Distinguished Engineer na Microsoft. Ele fora o arquiteto de alguns compiladores da Borland, e entre suas criacoes mais conhecidas estao o Turbo Pascal e o Delphi.CaracteristicasO C# e, de certa forma, a linguagem de programacao que mais diretamente reflete a plataforma .NET sobre a qual todos os programas .NET executam. C# esta de tal forma ligado a esta plataforma que nao existe o conceito de codigo nao-gerenciado (unmanaged code) em C#. Suas estruturas de dados primitivas sao objetos que correspondem a tipos em .NET. A desalocacao automatica de memoria por garbage colletor alem de varias de suas abstracoes tais como classes, interfaces, delegados e excecoes sao nada mais que a exposicao explicita recursos do ambiente .NET.Quando comparada com C e C++, a linguagem e restrita e melhorada de varias formas incluindo:* Ponteiros e aritmetica sem checagem so podem ser utilizados em uma modalidade especial chamada modo inseguro (unsafe mode). Normalmente os acessos a objetos sao realizados atraves de referencias seguras, as quais nao podem ser invalidadas e normalmente as operacoes aritmeticas sao checadas contra sobrecarga (overflow).* Objetos nao sao liberados explicitamente, mas atraves de um processo de coleta de lixo (garbage collector) quando nao ha referencias aos mesmos, previnindo assim referencias invalidas.* Destrutores nao existem. O equivalente mais proximo e a interface Disposable, que juntamente com a construcao using block permitem que recursos alocados por um objeto sejam liberados prontamente. Tambem existem finalizadores, mas como em Java sua execucao nao e imediata.* Como no Java, nao e permitida heranca multipla, mas uma classe pode implementar varias interfaces abstratas. O objetivo principal e simplificar a implementacao do ambiente de execucao.* C# e mais seguro com tipos que C++. As unicas conversoes implicitas por default sao conversoes seguras, tais como ampliacao de inteiros e conversoes de um tipo derivado para um tipo base. Nao existem conversoes implicitas entre inteiros e variaveis logicas ou enumeracoes. Nao existem ponteiros nulos (void pointers) (apesar de referencias para Object serem parecidas). E qualquer conversao implicita definida pelo usuario deve ser marcada explicitamente, diferentemente dos construtores de copia de C++.* A sintaxe para a declaracao de vetores e diferente ("int[] a = new int[5]" ao inves de "int a[5]").* Membros de enumeracao sao colocados em seu proprio espaco de nomes (namespace)* C# nao possui modelos (templates), mas C# 2.0 possui genericos (generics).* Propriedades estao disponiveis, as quais permitem que metodos sejam chamados com a mesma sintaxe de acesso a membros de dados.* Recursos de reflexao completos estao disponiveisC# Versus Java Apesar de C# ser frequentemente tido como similar a Java, existem uma serie de diferencas importantes, tais como:* Java nao implementa propriedades nem sobrecarga de operadores.* Java nao implementa um modo inseguro que permita a manipulacao de ponteiros e aritmetica sem checagem.* Java possui excecoes checadas, enquanto excecoes em C# sao nao checadas como em C++.* Java nao implementa o goto como estrutura de controle, mas C# sim.* Java utiliza-se de comentarios Javadoc para gerar documentacao automatica a partir