C# é uma linguagem de programação moderna e multi-paradigma desenvolvida pela Microsoft dentro de seu framework .NET. Destinada principalmente ao desenvolvimento de software para Windows e aplicações web, C# combina tipagem forte, recursos de programação imperativa e orientada a objetos (OOP) com capacidades de programação funcional. É amplamente reconhecida por sua legibilidade, versatilidade e suporte robusto ao desenvolvimento, tornando-se uma favorita entre desenvolvedores empresariais e programadores de jogos, especialmente em conjunto com o motor de jogos Unity.
C# foi criada no início dos anos 2000 por Anders Hejlsberg e sua equipe na Microsoft como parte da iniciativa .NET. A linguagem foi projetada para melhorar a produtividade, fornecendo uma linguagem de programação simples, moderna e orientada a objetos que se integra bem ao ecossistema da Microsoft. A influência de linguagens anteriores, como Java e C++, é evidente em sua estrutura.
As versões iniciais do C# estavam intimamente associadas ao framework .NET, que visava fornecer aos desenvolvedores um conjunto abrangente de bibliotecas e ferramentas para a construção de aplicações. A versão 1.0 do C# foi lançada juntamente com o .NET Framework em 2002. Ao longo dos anos, recursos e melhorias adicionais foram implementados, com o C# evoluindo significativamente através de várias iterações.
O lançamento do .NET Core em 2016 marcou um marco importante, tornando o C# multiplataforma e aumentando sua versatilidade. Versões subsequentes, incluindo C# 7.0 e além, introduziram recursos como tuplas, correspondência de padrões e streams assíncronos, aprimorando ainda mais a linguagem. Hoje, o C# está na vanguarda do desenvolvimento moderno de software, apoiado por uma comunidade vibrante e atualizações contínuas no ecossistema .NET.
C# é uma linguagem de tipagem estática, o que significa que os tipos de variáveis são conhecidos em tempo de compilação. Esse recurso melhora o desempenho e previne certos tipos de erros em tempo de execução.
int numero = 10;
string texto = "Olá, C#";
C# suporta totalmente os conceitos de OOP, permitindo que os desenvolvedores criem classes e objetos, encapsulem dados e utilizem herança e polimorfismo.
class Animal {
public void Falar() {
Console.WriteLine("O animal fala");
}
}
class Cachorro : Animal {
public void Falar() {
Console.WriteLine("O cachorro late");
}
}
C# permite o uso de propriedades, possibilitando uma melhor encapsulação dos dados da classe enquanto mantém fácil acesso para obter e definir valores.
class Pessoa {
private string nome;
public string Nome {
get { return nome; }
set { nome = value; }
}
}
C# suporta delegados, que são ponteiros de função seguros em termos de tipo, e eventos para implementar programação orientada a eventos.
public delegate void Notificar(); // Delegado
public class Processo {
public event Notificar ProcessoConcluido; // Evento
public void IniciarProcesso() {
// Lógica do processo
ProcessoConcluido?.Invoke(); // Disparar evento
}
}
C# oferece LINQ, um recurso poderoso que permite consultar coleções de maneira concisa e legível.
var numeros = new List<int> { 1, 2, 3, 4, 5 };
var numerosPares = from n in numeros where n % 2 == 0 select n;
C# simplifica a programação assíncrona usando as palavras-chave async e await, melhorando o desempenho para tarefas vinculadas a I/O.
public async Task<string> ObterDadosAsync() {
using (var cliente = new HttpClient()) {
return await cliente.GetStringAsync("http://exemplo.com");
}
}
Métodos de extensão permitem que os desenvolvedores "adicionem" novos métodos a tipos existentes sem modificar seu código-fonte.
public static class MinhasExtensoes {
public static int ContarPalavras(this string str) {
return str.Split(' ').Length;
}
}
C# suporta tipos de valor nulos, permitindo a representação de dados que podem estar ausentes.
int? inteiroNulo = null;
C# fornece suporte embutido para tuplas, permitindo a encapsulação de múltiplos valores.
var pessoa = (Nome: "João", Idade: 30);
Console.WriteLine($"{pessoa.Nome} tem {pessoa.Idade} anos.");
O .NET SDK é o conjunto de ferramentas central para desenvolver aplicações em C#. Inclui o CLR (Common Language Runtime), bibliotecas e compiladores necessários para executar e compilar código C#.
O Visual Studio é a principal IDE para desenvolvimento em C#, oferecendo depuração avançada, IntelliSense e um ambiente unificado para construir e implantar aplicações. Outras opções populares incluem JetBrains Rider e Visual Studio Code, que, com as extensões adequadas, podem ser adaptadas para o desenvolvimento em C#.
Para construir um projeto C# usando a CLI do .NET, pode-se usar comandos como dotnet new
para criar um novo projeto, dotnet build
para compilar o código e dotnet run
para executar a aplicação. O processo de criação de uma aplicação console seria assim:
dotnet new console -n MeuAppConsole
cd MeuAppConsole
dotnet run
C# é utilizado em uma ampla gama de aplicações, incluindo:
C# se destaca como uma linguagem poderosa em comparação com outras. Aqui estão algumas semelhanças e diferenças notáveis:
Traduzir código entre C# e outras linguagens pode frequentemente ser facilitado por ferramentas de tradução de código fonte, comumente conhecidas como transpilers. Por exemplo, ferramentas como SharpKit podem converter código C# em JavaScript para aplicações web, enquanto Bridge.NET permite que C# seja compilado para aplicações JavaScript ou HTML5.
Em cenários mais especializados, existem bibliotecas e ferramentas que convertem C# para outras linguagens como Java ou Python, frequentemente focando em recursos e paradigmas específicos da linguagem para garantir um processo de conversão eficaz.
Por exemplo, ao traduzir de C# para Python, o desenvolvedor deve ter cuidado para adaptar o sistema de tipos e as práticas de gestão de memória, uma vez que a tipagem dinâmica e os princípios de coleta de lixo do Python diferem da tipagem estática e do runtime gerenciado do C#.
Ferramentas existentes que facilitam várias traduções de código incluem CodePorting para converter aplicações .NET em Java e Jitterbit para soluções de integração mais amplas. Cada ferramenta tem suas forças, e a escolha depende das especificidades do projeto e dos resultados desejados.