Série da semana: Conheça o jeito Pythônico de programar

Veja mais

Quer ter acesso a todos os cursos desse Guia?

Linguagem C#

Neste guia de consulta você encontrará diversos conteúdos que podem ser usados ao longo dos seus estudos sobre a linguagem de programação C#. Consulte este guia para aprender mais sobre certos recursos da linguagem.

Introdução ao C#

Para que você comece a desenvolver aplicações com C# e .NET, o primeiro passo é preparar o ambiente, instalando as ferramentas necessárias. No curso abaixo você verá como proceder:

C# é uma linguagem de programação criada pela Microsoft como parte da plataforma .NET. Por ter uma sintaxe parecida com o Java e C++, o C# pode ser indicado mesmo para programadores iniciantes, que já conhecem a programação Orientada a Objetos. Com ela podemos criar desde aplicações web, desktop, mobile e também jogos eletrônicos.

Nos cursos a seguir você aprenderá desde os conceitos mais básicos da linguagem C# até os recursos de uma das suas versões mais recentes:

Já os links abaixo podem ser usados para consultar rapidamente recursos específicos da linguagem e sua sintaxe:

Explorando o .NET Framework

Até aqui você já viu como utilizar vários recursos da linguagem C# e deve saber que quando usamos essa linguagem normalmente estaremos usando o .NET Framework, que nos provê um conjunto de classes e ferramentas para o desenvolvimento de aplicações. Conhecer os recursos do .NET é de extrema importância para você que está começando no C#, por isso sugerimos que assista ao curso a seguir:

No curso abaixo aprenderemos o que é o .NET Core, uma plataforma para desenvolvimento de aplicações desenvolvida e mantida pela Microsoft. Veremos aqui suas principais características e diferenças com relação ao .NET Framework.

Bibliotecas de classes

Bibliotecas de classes (class libraries) são tipos de projetos usados para agrupar classes, normalmente de acordo com um objetivo (entidades, validações, etc). Tais bibliotecas podem ser referenciadas por outros projetos, como ASP.NET MVC, Windows Forms. etc. Assim algumas funcionalidades ficam centralizadas, bem como sua manutenção e testes. No curso abaixo você aprenderá a criar e utilizar essas class libraries no Visual Studio:

Coleções

O .NET Framework é um conjunto de ferramentas e classes que suportam o desenvolvimento de aplicações com a linguagem C# (além de outras linguagens). Entre as várias classes do framework que são de uso frequente em nosso dia a dia estão as coleções, que implementam diferentes estruturas de dados, tais como listas, filas, pilhas, tabelas hash. Nos artigos a seguir você poderá conhecer algumas das principais classes de coleções que você pode usar em suas aplicações com C#:

Essas e outras classes de coleções implementam várias interfaces que padronizam seu funcionamento e que você mesmo pode implementar em suas classes próprias. Essas interfaces encontram-se no namespace System.Collections, que você pode conhecer em maiores detalhes no artigo abaixo:

Tratamento de exceções

Exceções ocorrem com frequência no código e saber lidar com elas é fundamental para garantir que as aplicações se comportem adequadamente nessas situações, sem travar ou parar de funcionar. Nesse sentido o tratamento de exceções é parte fundamental de qualquer linguagem, pois permite identificar os problemas que ocorreram e definir fluxos alternativos para o programa. Observe a Figura 1.

Tratamento de exceções
Figura 1. Tratamento de exceções

Para aprender a tratar exceções em C#, sugerimos os seguintes conteúdos:

Ainda no contexto de identificação e tratamento de erros é importante saber utilizar os recursos de depuração/debug do Visual Studio. Um deles é o breakpoint, que permite pausar a execução da aplicação em determinado ponto do código para que possamos avaliar seu estado naquele momento. Para saber mais, acesse o link abaixo:

Generics

Gerenics é um recurso da linguagem C#, também presente em outras linguagens atuais, que simplifica e torna mais seguro o trabalho com objetos cujo tipo não é conhecido inicialmente. Ou seja, com esse recurso podemos trabalhar com tipos de dados "genéricos" sem ter de recorrer a declarar todos os objetos como um supertipo (como a classe Object) e realizar casts para manipulá-los de acordo com seu tipo real. Para conhecer melhor esse recurso sugerimos a leitura dos artigos a seguir:

Manipulação de arquivos

Ler, escrever, criar e excluir arquivos são tarefas comuns em diferentes tipos de aplicação. Em C# contamos com um conjunto de classes que torna bastante simples implementar essas funcionalidades, como você poderá ver nos seguintes artigos:

A maior parte das classes para manipulação de arquivos está contida no namespaces System.IO (de Input/Output), que é explorado em detalhes nos artigos abaixo:

Caso você precise lidar especificamente com arquivos ZIP também há classes específicas para isso. Se for esse o caso, sugerimos a leitura do artigo abaixo:

LINQ

LINQ (Language Integrated Query) é uma parte da linguagem C# que permite consultar coleções de dados com uma sintaxe semelhante à da linguagem SQL, com cláusulas para filtros e junções entre resultados, por exemplo. Para conhecer esse recurso, confira os links abaixo:

Uma possibilidade muito interessante do LINQ é a de utilizar Lambda Expressions para realizar as consultas, ao invés da sintaxe padrão de queries. Caso você ainda não saiba o que são Lambda Expressions, você pode ver o curso abaixo e logo em seguida ver como aplicá-las no LINQ:

Como você já deve ter visto até aqui, o LINQ é bastante flexível e pode ser usado em diferentes contextos. Por exemplo, nos links abaixo você pode ver exemplos de utilização desse recurso na leitura de arquivos XML e na persistência de dados:

Threads

Por meio de threads uma aplicação pode executar diferentes tarefas de forma concorrente, evitando o sobrecarregamento do fluxo principal do programa. Por exemplo, por meio de threads podemos executar um procedimento pesado em segundo plano, deixando a interface com o usuário livre para interações.

Para dar os primeiros passos com threads em C# você pode ver o seguinte artigo:

Como você deve ter visto, com threads conseguimos implementar processamento assíncrono e paralelo, o que pode nos garantir ganho de desempenho e manter a aplicação funcional durante processamentos pesados. Para saber mais sobre programação assíncrona e paralela em C#, confira os conteúdos abaixo:

Serialização

Com muita frequência precisamos persistir os objetos das nossas aplicações em arquivos ou enviá-los, por exemplo, através da internet para outras aplicações. Nesses casos é preciso obter uma representação desses objetos em um formato adequado, como XML, JSON ou binário. Para isso usamos a técnica de serialização, que você poderá conhecer em maiores detalhes nos links a seguir:

E se você precisa manipular dados no formato JSON com frequência uma boa opção é usar a biblioteca Json.NET, que é apresentada no seguinte curso:

Reflection

Reflection é uma técnica que tem por objetivo obter informações sobre objetos, classes e assemblies em tempo de execução. Nos artigos abaixo você poderá aprender a trabalhar com reflexão em C# e algumas aplicações práticas dessa técnica:

Avançando na linguagem

Para lhe ajudar a seguir evoluindo no aprendizado do C#, indo além dos recursos mais básicos e fundamentais, separamos aqui um curso que apresenta conceitos avançados dessa linguagem:

Orientação a Objetos

Normalmente, quando começamos a programar, o primeiro paradigma que conhecemos é o estruturado. Ele facilita o aprendizado por não trazer consigo tantos conceitos, como os que fazem parte da Orientação a Objetos. Imagine começar a criar algoritmos e, ao mesmo tempo, conciliar conceitos abstratos para poder programar as primeiras soluções? Não seria fácil.

Portanto, é natural percorrer o caminho: Programação Estruturada -> Programação Orientada a Objetos. O único porém desse processo é que algumas vezes acabamos levando algumas características da primeira para a segunda, características essas que podem prejudicar um pouco o nosso código. Pensando nessa etapa de transição, preparamos o seguinte artigo:

Para prender mais sobre o paradigma da Orientação a Objetos, consulte os artigos a seguir:

É válido ressaltar que a Orientação a Objetos também não é uma “bala de prata”, não é a opção ideal para tudo. Ela possui vantagens e desvantagens. Para conhecer esses pontos, assim como alguns mitos que foram criados em torno dela, acesse os artigos:

Ainda está em dúvida se deve ou por que deveria usar a POO? Fizemos um bate-papo pra lhe ajudar nesse momento:

Pilares da Orientação a Objetos

Após o primeiro contato com a Orientação a Objetos, você deve ter observado termos como abstração, encapsulamento, herança e polimorfismo. Estes são os fundamentos, os quatro pilares da POO. Para aprender sobre eles, algo fundamental para programar corretamente com esse paradigma, acesse:

Coesão e acoplamento

E agora, como saber se estou programando orientado a objetos, se estou aplicando corretamente seus conceitos? Uma maneira de sanar essa dúvida é observar se seu código está coeso e com baixo acoplamento.

Um código coeso é aquele que implementa apenas o que de fato é de sua responsabilidade, por exemplo: um método responsável por imprimir um relatório não deve saber como acessar o banco de dados. Se ele sabe como fazer isso, dizemos que ele tem baixa coesão, o que deve ser evitado.

Já um código fortemente acoplado é aquele que depende de muitos pacotes, classes e/ou métodos para prover uma funcionalidade. Quando se deparar com situações assim, cuidado. O post a seguir expõe como melhorar a qualidade do seu código, o ajudando a reduzir o acoplamento entre classes.

Princípios SOLID

Ao avançar seus estudos em OO, logo você se deparará com os Princípios SOLID. Esse termo representa cinco regras que são avaliadas por arquitetos e programadores como as boas práticas para uma programação orientada a objetos, nos auxiliando na construção de um código de fácil leitura, manutenção e extensão.

O nome SOLID também representa um acrônimo, e como apresentado a seguir, é formado pela junção da primeira letra do nome de cada um dos princípios.

Single Responsibility Principle: De acordo com esse princípio, cada classe deve ser planejada para possuir apenas uma responsabilidade. Sobre ele, temos alguns posts específicos, os quais indicamos a seguir:

Open Closed Principle: Esse princípio determina que uma classe deve ser fechada para modificações e aberta para extensões. Sobre ele, recomendamos os posts:

Liskov Substitution Principle: Esse princípio está relacionado à herança e indica que devemos ser capazes de substituir a classe filha pela classe pai sem que o sistema apresente problemas;

Interface Segregation Principle: Já o princípio da segregação dita que precisamos planejar interfaces específicas, com propósito bem determinado, de modo que quando implementada a classe que o faz não precise codificar métodos desnecessários;

Dependency Inversion Principle: Por fim, o princípio da inversão de dependência sinaliza que o recomendado é depender apenas de classes abstratas, e não de classes concretas.

Para aprender sobre todos esses princípios, acesse o conteúdo a seguir:

Orientação a Objetos na prática

Agora que você já conhece os conceitos, que tal colocá-los em prática programando com a linguagem C#? Os artigos e o DevCast a seguir lhe ensinarão como aplicar os conceitos da Orientação a Objetos com os recursos do C#:

Mais sobre .NET

Além dos cursos e exemplos sugeridos nesse guia, a DevMedia publica com frequência novos conteúdos sobre .NET, os quais você pode conferir nos Guias de Consulta abaixo:

Além disso, você pode conferir todo o conteúdo de .NET clicando aqui.

Suporte ao aluno - Deixe a sua dúvida.
Assinatura Devmedia
Faça parte dessa comunidade 100% focada em programação e tenha acesso ilimitado. Nosso compromisso é tornar a sua experiência de estudo cada vez mais dinâmica e eficiente. Portanto, se você quer programar de verdade seu lugar é aqui. Junte-se a mais de...
+ 800 Mil programadores
,90* / mês
  • Séries
  • Projetos completos
  • Cursos
  • Guias de carreiras
  • DevCasts
  • Desafios
  • Artigos
  • App
  • Suporte em tempo real
A assinatura é cobrado através do seu cartão de crédito. *Tempo minimo de assinatura: 12 meses.
Assinatura Devmedia
Faça parte dessa comunidade 100% focada em programação e tenha acesso ilimitado. Nosso compromisso é tornar a sua experiência de estudo cada vez mais dinâmica e eficiente. Portanto, se você quer programar de verdade seu lugar é aqui. Junte-se a mais de...
+ 800 Mil programadores
Conheça agora!
,90* / mês
  • Séries
  • Projetos completos
  • Cursos
  • Guias de carreiras
  • DevCasts
  • Desafios
  • Artigos
  • App
  • Suporte em tempo real
A assinatura é cobrada através do seu cartão de crédito. *Tempo mínimo de assinatura: 12 meses.