Introdução a linguagem C#

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 da linguagem C#

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.


Confira: Curso de Introdução a Programação com C#


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.

Saiba mais sobre .NET ;)

  • Como aprender .NET na prática:
    Neste Guia de Consulta você encontrará conteúdos que abordam na prática o desenvolvimento de aplicações em .NET utilizando seus variados frameworks, como ASP.NET MVC, Web API e Entity Framework.
  • Acesso a bancos de dados em .NET:
    Neste guia de consulta você encontrará diversos conteúdos sobre como acessar bancos de dados em aplicações .NET. Veja aqui como usar o Entity Framework e o NHibernate para bancos relacionais e como trabalhar com o MongoDB.
  • Guia de ASP.NET MVC:
    Neste Guia de Referência você encontrará o conteúdo que precisa para aprender a desenvolver aplicações web com o framework ASP.NET MVC e a linguagem C#.

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 :

  • O chamador não precisa fazer nada explicitamente, se é preciso criar um componente que irá ser usado em uma aplicação cliente, não é necessário se preocupar com o chamador passando informações explicitamente, ele sempre irá capturar isso pelo Caller Info.
  • Não é necessário usar explicitamente System.Reflection.
  • Esses atributos serão muito úteis para a implementação do servidor.

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

  • CallerFilePath, que proverá o caminho para o arquivo a partir de onde o método é chamado;
  • CallerLineNumber, irá prover o número da linha de onde a chamada é feita;
  • CallerMemberName, que irá prover o nome do método que está fazendo a chamada.

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.

Links Úteis

  • Padrões Command e outros Patterns na prática:
    Os padrões de projetos são tão discutidos e exigidos por empresas e instituições de software, no seu dia a dia como programador . Por isso, nesse artigo veremos como aplicá-los em situações práticas que se aproximam da realidade de inúmeros softwares do mercado, bem como evoluir o sistema com base em qual padrão é melhor para cada cenário.
  • Django REST Framework: Criando uma API RESTful 1:N:
    Veremos neste curso como implementar o relacionamento 1:N entre três entidades (Vaga, Empresa e Requisito) utilizando APIs com o Django REST framework.
  • API RESTful em Java: subrecursos em um relacionamento N:N:
    Aprenda a implementar uma Web API RESTful em sistemas que possuam relacionamentos N:N, isto é, do tipo muitos para muitos, no banco de dados. Neste curso veremos como realizar o mapeamento objeto-relacional para que o framework ORM - Hibernate, por exemplo - saiba como lidar com esse tipo relacionamento.

Saiba mais sobre C# ;)

  • O que é C#?:
    Neste curso vamos conhecer o C#, uma linguagem de programação orientada a objetos desenvolvida pela Microsoft, que roda sobre o .NET Framework e que nos permite criar diversos tipos de aplicações, tais como, aplicações web, desktop, mobile, IoT e outras.
  • O que é .NET Core?:
    Neste curso aprenderemos o que é o .NET Core, uma plataforma para desenvolvimento de aplicações desenvolvida e mantida pela Microsoft.
  • Introdução a Variáveis no C#:
    Veja neste artigo dicas de como criar variáveis no C#, além de entender os principais tipos de variáveis.