Introdução à linguagem C#

Introdução

A linguagem C# (lê-se “cêsharp”) foi criada juntamente com a arquitetura da plataforma .NET da Microsoft. Construída do zero, sem se preocupar com compatibilidade de código legado, e a maioria das classes do framework .NET foram escritas com essa linguagem. Vários desenvolvedores participaram do projeto de criação da linguagem, mas o principal envolvido no projeto foi o engenheiro Anders Hejlsberg, que além do C# foi criador do Turbo Pascal e do Delphi.

O nome C# fez com que muitas pessoas pensassem que a cerquilha (#) seria uma sobreposição de quatro símbolos de adição, dando assim a entender que poderia ser um C++++, mas na verdade o símbolo # se refere ao sinal musical de sustenido (#), que indica meio tom acima de uma determinada nota musical. Possui uma sintaxe expressiva, elegante e é totalmente orientada a objetos.

Características

A linguagem C# foi influenciada por várias linguagens, como por exemplo, JAVA e C++. Na verdade, ela é uma junção das principais vantagens dentre essas linguagens, melhorando suas implementações e adicionando novos recursos, fazendo a linguagem atrativa para desenvolvedores que queiram migrar para o Microsoft .NET.

Sua sintaxe é simples e de fácil aprendizagem, muito familiar com a sintaxe de JAVA e C. Além disso, simplifica muitas complexidades do C++, fornecendo recursos poderosos, como tipos de valor nulo, enumerações, delegações, expressões lambdas e acesso direto a memória, suporte a métodos e tipos genéricos, gerando uma melhor segurança de tipo e desempenho.

Como C# é uma linguagem orientada a objetos, ela suporta conceitos como encapsulamento, herança e polimorfismo. Todas suas variáveis e métodos são encapsulados dentro das definições de uma classe. Ela é usada na maioria das classes do .NET framework. Foi a primeira linguagem orientada a componentes da família C/C++, segue os padrões POO, onde tudo deriva de um ancestral comum, no caso de C# é System.Object.

É fortemente tipada, possui suporte a DLL's, COM e COM+, é case-sensitive e suas classes podem implementar várias interfaces, mas a herança por extensão é simples. Seus programas executam sobre um ambiente gerenciável, ficando a cargo do .NET framework realizar o controle de memória. Possui a Language Integrated Query (LINQ), que fornece recursos de consulta interna entre uma variedade de fontes de dados.

Métodos e tipos não precisam ser declarados em ordem, um arquivo C# pode conter inúmeras classes, estruturas e interfaces. As inovações do C# permitem escrita de aplicativos de maneira rápida, mantendo a expressividade e elegância das linguagens C-Style. Permite aos seus desenvolvedores criarem uma infinidade de aplicativos compatíveis com o .NET framework, como por exemplo aplicações tradicionais do Windows, web services, componentes distribuídos, aplicativos cliente-servidor e aplicativos com integração de banco de dados, entre outros tipos.

Novidades da versão 5.0

As maiores novidades da versão 5.0 da linguagem ficam por conta do uso de AsyncFeaturee Caller Info. O AsyncFeature introduz duas novas palavras chaves :async e await. O uso de chamadas assíncronas já era possível anteriormente, mas foi simplificado dentro da nova versão. O recurso de chamadas para métodos assíncronos pode ser muito utilizado em aplicativos que queiram ser mais atrativos e não queiram bloquear o usuário enquanto um processo está sendo executado. Por exemplo, ao executar uma determinada ação como um envio de e-mails para clientes cadastrados, o usuário não deseja esperar que todos os e-mails sejam enviados para ele poder continuar usando o sistema. Esse envio deve ser feito em segundo plano, não bloqueando a interação do usuário com o sistema enquanto os e-mails são enviados.

Geralmente um método que é modificado para ser assíncrono contém ao menos um modificador await correspondente. O método irá funcionar de maneira síncrona até o primeiro await ser encontrado, nessa altura ele é suspenso até a tarefa estar completa, enquanto isso, a execução é retornada ao chamador do método. Se o método não tiver um método await correspondente ele é executado de forma síncrona. Um aviso é emitido pelo compilador alertando sobre qualquer método assíncrono que não contenha um await correspondente.

Os retornos de métodos assíncronos podem ser do tipo Task, Task<TResult> ou void. O tipo Task<TResult> é usado como retorno quando o método tem um tipo a ser retornado. Por exemplo, se o método irá retornar um tipo int e necessita ser assíncrono, o retorno do método será Task<int>, se for retornado um String o retorno será Task<String>. Já o uso de Task é para situações onde nenhum valor significativo é retornado quando o método termina de executar todas as suas instruções, ou seja, a chamada do método retorna um Task, mas quando Task está finalizada qualquer await que estiver aguardando o retorno do método irá igualá-lo a void.

O tipo void é usado principalmente para definir manipuladores de eventos, onde um void é necessário. O chamador de um método assíncrono com retorno void, não pode capturar exceções que o método por ventura venha a lançar.

Outra novidade é o CallerInformation, que pode ajudar na depuração e criação de ferramentas para diagnóstico, ajudando a evitar código duplicado em invocação de métodos, como também em logs. Foi criado especificamente para decorar parâmetros opcionais de um método, que podem então serem usados em tempo de execução pelo .NET, para injetar informações ao chamador. Algumas das vantagens do uso do Caller Info são:

Existem três tipos de CallerInformation no C# 5.0, são eles:

Utilizando Caller Info

Na Listagem 1 é mostrado o exemplo de código com as chamadas aos Caller Info para mostrar uma informação mais detalhada no log do projeto.

Listagem 1: Exemplo de código com uso de Caller Info

class Program{
	static void diga_mensagem(string msg, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", 
	[CallerLineNumber] int sourceLineNumber = 0){
		Console.WriteLine("Sua mensagem foi > " + msg); 
		Trace.WriteLine("memberName : " + memberName); 
		Trace.WriteLine("sourceFilePath : " + sourceFilePath); 
		Trace.WriteLine("sourceLineNumber : " + sourceLineNumber); 
		Console.ReadKey();
	}
	static void Main(string[] args){
		Console.WriteLine("Diga sua mensagem : ");
		string msg = Console.ReadLine();
		diga_mensagem(msg);
	}
}

Na declaração do método diga_mensagem(), são declarados quatro argumentos. Um é referente ao parâmetro que será capturado pela informação digitada pelo usuário, os outros três são argumentos para o uso dos Callers Info e irão exibir mensagens no log da aplicação. Na Figura 1 é visualizado o resultado da execução de aplicação.

Execução da Aplicação

Figura 1: Execução da aplicação

Na Figura 2 são exibidas as informações que foram capturadas pelos Caller Info que foram passados como argumentos na chamada do método.

Resultado do uso de Caller Info

Figura 2: Resultado do uso de Caller Info

Conclusão

A linguagem C# é uma linguagem que visa facilitar muito o desenvolvimento, e possui uma vasta gama de recursos que podem proporcionar uma grande produtividade para desenvolvedores que a utilizam. Além dos recursos como sua sintaxe e programação orientada a objetos, que fazem dela uma linguagem poderosa para se trabalhar. Aliada ao uso do framework .NET, é possível criar diversos tipos de aplicações,e ainda ter um ambiente onde o desenvolvedor pode focar na sua lógica o tempo todo, sem se preocupar com a gerência de recursos, já que que o próprio framework se encarrega de cuidar disso.

Sobre... Assembly C C++ C# Java