O .NET é uma plataforma como a plataforma Java que roda sobre diferentes
Sistemas Operacionais, ou seja, é um ambiente de desenvolvimento e execução de
programas multilinguagem e multiplataforma que visa facilitar o desenvolvimento
e execução de programas, disponibilizando bibliotecas, compilador, máquina
virtual, controle de memória, e outras coisas mais.
Por ser da Microsoft ela começou focada apenas no ambiente Windows com o
.NET Framework, mas desenvolveu o .NET Core que é multiplataforma
como o Java, desde que o S.O. destino tenha implementado as especificações para
rodar o .NET Core.
1 - Plataforma .Net Framework (Ambiente de execução para Windows)
O .NET Framework é usado para construir aplicações desktop e/ou
aplicações ASP.NET rodando no IIS (Internet Information Server). O ambiente
resume-se nesses 4 pontos:
- CLR - Common
Language Runtime (Maquina virtual como a JVM no Java)
- Biblioteca .Net
Framework - Biblioteca de classes
- Aplicação .NET
– Programas que fazemos (Escritos a partir das
linguagens do próximo ponto e compiladas para MSIL - Microsoft Intermediate
Language)
- Linguagens
suportadas: VB, ASP, ASP.net, C#, etc.
2 - Plataforma .NET
Core
O .NET Core é uma implementação grátis, de código aberto, cross-platform
do .NET Framework. Ele suporta quatro tipos de aplicações: console, ASP.NET
Core, cloud, e Universal Windows Platform (UWP). O ambiente resume-se nesses 4
pontos:
- CLR - Common
Language Runtime (Maquina virtual como a JVM no Java)
- Bilbioteca .Net
Core - Biblioteca de classes
- Aplicação .NET
- Programas que fazemos (Escritos a
partir das linguagens do próximo ponto e compiladas para MSIL - Microsoft
Intermediate Language)
- Linguagens
suportadas: C#, Visual Basic, F#, etc...
3 - .NET Standard
O .NET Standard é uma especificação para implementar a BCL(Base Class
Libraries - uma coleção de Bibliotecas de Classe).
Uma vez que uma implementação .NET (Framework ou Core) precisa seguir
esse padrão, desenvolvedores de aplicações não terão que se preocupar com
diferentes versões do BCL pra cada implementação de framework de código
gerenciado.
Resumindo, o .NET Standard funciona como as especificações Java.
OBS: O .NET Framework implementa o .NET Standard mas tem coisas a mais
específicas para o Windows, já que o Standard visa justamente a questão da
multiplataforma.
4 - Tipo de dados
principais:
byte [0-255]
short, int, long
float, double,
decimal
bool
string (com 'S'
minúsculo)
String (deve importar
o namespace System)
object (com O
minúsculo)
enum
5 - Cast com C#
Cliente outroCliente
= (Cliente) obj; //tradicional
como no Java
Cliente outroCliente
= obj as Cliente; //Testa se é
do mesmo tipo, se não setta nulo, evitando a exceção de tipo imcompatível
6 - Concatenando
Strings no C# com propriedades
string a =
"Número " + Numero + ", Agência " + Agencia + ", Saldo
" + Saldo;
string b =
$"Número {Numero}, Agência {Agencia}, Saldo {Saldo}";
string c = @"Texto
de várias linhas sem precisar ficar concatenando com ‘+’ ";
7 - Modificadores de
Acesso
public = Pode se acessado por todo mundo
private = Apenas acesso interno
protected = Apenas acesso interno e por classes filhas
internal = Deixa a visibilidade apenas para o projeto ao qual pertence (padrão
para classes no C#)
internal protected = Modificador formado por duas palavras e que une a funcionalidade do
protected e internal
8 - Campos de uma
classe
Campos de classes no C# são equivalentes as propriedades de uma classe
no Java, a partir deles podemos construir as Propriedades no C#,
conceito explicado pouco mais a frente.
Uma coisa interessante sobre os campos é que podemos usar a palavra
reservada "readOnly" para definir um campo que pode ter seu
valor setado apenas no construtor, e que não pode mais ser alterado depois, mesmo
dentro da própria classe!
9 - Properties
(Propriedades) no C#
Em Java, propriedades são os campos de uma classe, podendo ser de tipo
primitivo ou objetos, geralmente privados com acesso via getters e setters.
Em C#, Propriedades são um conceito um pouco diferente, como se
juntassem em uma única coisa as propriedades do Java (campos da classe) e seus
métodos getter's e setter's. As Properties (Propriedades) começam com letra
maiúscula. Sua declaração na versão simplificada é:
public double Altura
{get; set;}
Isso serve para tipos
primitivos, objetos, listas etc...
public Pessoa
Funcionario {get; set;}
public
List<Card> MeuCard {get; set;}
public int Abc {get;
private set;}
No C#, o método set por padrão recebe uma variável de nome "value",
portanto, para os casos em que se deseja fazer uma validação ou outra coisa no
método set, usa-se o value.
OBS: Quando não escrevemos o método setter de uma Propriedade, o compilador
cria um campo privado e "readOnly" e apenas o getter do campo.
10 - Herança no C#
Para dizer que uma classe implementa uma interface ou estende uma classe
em C# basta colocar ":" entre o nome da classe atual e a
classe que ela estende e/ou lista de interfaces separadas por virgula.
Não há diferença a declaração de implementar e estender em C#. Porém, a
classe estendida deve vir primeiro que as interfaces.
Exemplo, temos o
seguinte:
Classe B, Interface
C, D e E. A classe A estende B e implementa C,D e E:
public class A : B,
C, D, E {
...
}
A classe filha pode fazer referência aos membros da classe pai com uso
palavra reservada "base", que seria o mesmo que "super" em
Java.
11 - Sobrescrita de
métodos (Polimorfismo):
Na classe pai é preciso usar a palavra "virtual" depois do modificador de
acesso:
public virtual double
GetBonificacao()
{
return Salario * 0.10;
}
Na classe filha é preciso usar a palavra "override" depois do
modificador de acesso:
public override double
GetBonificacao()
{
return Salario + base.GetBonificacao();;
}
OBS: As propriedades
no C# (Lembrando que o conceito de propriedades no C# é diferente do Java) também
podem fazer uso de "virtual" e "override" para sobrescrita,
já que elas contém os métodos getter's e setter's e é possível que seja
necessário a sobrescrita de um desses ou até dos dois.
12 - Construtores
Construtores da classe filha chamando construtores da classe pai é bem
diferente no C#.
Pai:
public
Funcionario(string cpf)
{
CPF = cpf;
}
Filha:
public Diretor(string
cpf) : base(cpf)
{
}
Também é diferente a chamada de construtores da mesma classe. Um
construtor pode chamar outro construtor da própria classe com o uso da palavra
reservada "this":
public Funcionario(string cpf) :
this(1500, cpf) // chama o construtor abaixo!
{
}
public
Funcionario(double salario, string cpf)
{
Salario = salario;
CPF = cpf;
}
13 - Foreach
No C# o foreach é
diferente do Java:
ContaCorrente[] itens
= new ContaCorrente[10];
foreach(ContaCorrente
conta in items)
{
...
}
14 - Trabalhando com
Datas
DateTime dataFimPagamento = new DateTime(2019, 10,
21);
DateTime dataAtual = DateTime.Now;
TimeSpan diferencaEntreDatas = dataFimPagamento -
dataAtual;
Console.WriteLine("Diferença em dias: " +
diferencaEntreDatas.Days);
OBS: Existe uma biblioteca chamada "Humanizer" que vem com vários
métodos para trabalhar com TimeSpan e exibir intervalos de datas de forma
amigável para o usuário final.
15 - Comentários
Comentários de
documentação (equivalente ao javadoc)
Além de escrever os comentários, precisa-se configurar o build para
gerar o xml dos comentários quando compilar o código. Vamos ver o comentário de documentação:
/// <summary>
/// Verifica a senha
fornecida.
/// </summary>
/// <param
name="senhaUsuario">Recebe a senha salva no parâmetro <paramref
name="senhaUsuario"/>.</param>
/// <param
name="senhaTentativa">Recebe a senha fornecida no parâmetro
<paramref name="senhaTentativa"/>.</param>
///
<returns>bool</returns>
public bool
CompararSenha(string senhaUsuario, string senhaTentativa)
{
return senhaUsuario == senhaTentativa;
}
Demais comentários são como o Java.
Essas são as diferenças básicas entre
o C# e o Java, porém a medida que se aprofunda no uso do C# com certeza
existirão outras diferenças entre as linguagens. O objetivo aqui é fazer um
resumo para quem precisa começar com o C#.
Nenhum comentário:
Postar um comentário