# Programação C Sharp
## Introdução

Em Junho de 2000 a Microsoft anunciou a Plataforma .NET e uma nova linguagem de programação chamada C# (se lê “C Sharp”). C# é uma linguagem fortemente tipada e orientada a objetos projetada para oferecer a melhor combinação de simplicidade, expressividade e performance.
A linguagem C# aproveita conceitos de muitas outras linguagens, mas especialmente de C++ e Java. Ela foi criada por Anders Hejlsberg (que já era famoso por ter criado o TurboPascal e o Delphi para a Borland) e Scott Wiltamuth.
A Plataforma .NET é centrada ao redor de uma Common Language Runtime (CLR, conceito similar ao da Java Virtual Machine, JVM) e um conjunto de bibliotecas que pode ser empregado em uma grande variedade de linguagens, as quais podem trabalhar juntas, já que todas são compiladas para uma mesma linguagem intermediária, a Microsoft Internediate Language (MSIL). Assim, é possível desenvolver aplicativos mesclando C# e Visual Basic ou qualquer outra linguagem suportada.
A sintaxe utilizada pelo C# é relativamente fácil, o que diminui o tempo de aprendizado. Todos os programas desenvolvidos devem ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a execução dos programas mais rápida se comparados com as linguagens de script (VBScript , JavaScript) que atualmente utilizamos na internet.
Poderíamos citar entre algumas das principais características do C#:
* Orientada a Objetos
* Não há variáveis ou funções globais. Todos os métodos e atributos devem ser declarados dentro de classes. Atributos e métodos estáticos de classes públicas podem servir como substitutos para variáveis e métodos globais.
* Apontadores • Em C#, apontadores só podem ser usados dentro de blocos especificamente marcados como inseguros. Programas com código inseguro precisam das permissões apropriadas para serem executados.
* Memória Gerenciada • Em C# a memória não precisa ser explicitamente liberada. Ao invés disso ela é automaticamente gerenciada por meio do Garbage Collector (coletor de lixo), que constantemente percore a memória alocada para verificar se ela ainda é necessária, eliminando assim o risco de vazamentos de memória.
* Tipagem Forte
* C# é mais fortemente tipada do que C++: as única conversões implícitas por default são aquelas que são consideradas seguras, como por exemplo o armazenamento de um inteiro em um tipo de dados maior ou a conversão de um tipo derivado para um tipo base. Não há conversão implícita entre booleanos e inteiros.

## O Ambiente de Desenvolvimento

O ambiente de desenvolvimento do C#, Microsoft Visual Studio, implementa o conceito de RAD (Rapid Application Development), oferecendo ferramentas para a construção rápida de aplicativos, ao mesmo tempo que oferece um excelente designer de telas e debugger integrado.
Entre os diversos recursos do ambiente podemos destacar:
* O Editor de Código (Code Editor), usado para manipular o código fonte;
* O Compilador C# (C# Compiler), utilizado para converter o código fonte em um programa executável;
* O Depurador do Visual Studio (Visual Studio Debugger), usado para testar seus programas;
* A Caixa de Ferramentas (Toolbox) e o Editor de Formulários (Windows Forms Designer), para a rápida criação de interfaces com o usuário usando o mouse;
* O Explorador de Soluções (Solution Explorer), útil para o gerenciamento de arquivos de projeto e configurações;
* O Editor de Projetos (Project Designer), usado para configurar o compilador, caminhos de instalação e demais recursos;
* O Visualizador de Classes (Class View), usado para navegar através das classes definidas no seu código fonte;
* A Janela de Propriedades (Properties Window), utilizada para definir as propriedades e eventos nos controles da sua interface com o usuário;
* O Navegador de Objetos (Object Browser), que pode ser usado para ver os métodos e classes disponíveis em bibliotecas externas (arquivos DLL, por exemplo), inclusive os objetos do Framework .NET;
* O Explorador de Documentos (Document Explorer), que navega através da documentação do produto em seu computador local ou na Internet.