.NET

Ótimo material de apoio: https://www.caelum.com.br/apostila-csharp-orientacao-objetos/

C# (Linguagem)

Tipos primitivos

Declaração: tipo nomeDaVariavel = valor;
Exemplo: int numero = 1;

Tipos primitivos de variáveis:

  • bool: true ou false
  • byte: 0 a 255
  • sbyte: -128 a 127
  • short: -32768 a 32767
  • ushort: 0 a 65535
  • int: -2147483648 a 2147483647
  • uint: 0 a 4294967295
  • long: -9223372036854775808 a 9223372036854775807
  • ulong: 0 a 18446744073709551615
  • float: -3.40282347E+38 a 3.40282347E+38
  • double: -1.7976931348623157E+308 a 1.7976931348623157E+308
  • decimal: -79228162514264337593543950335M a 79228162514264337593543950335M
  • char: caracteres delimitados por aspas simples. Exemplo: 'a', 'b', etc.

Para que aceitem null, existe o tipo Nullable, que pode ser escrito de duas formas:
int? meuNumero = null ou Nullable<int> meuNumero = null

Constantes

São "variávels" que não mudam. Deve ter o nome da variável tudo em MAIÚSCULO. const string URL = "http://asdasdasd.com";

Usando var

Podemos omitir a declaração do tipo da variável utilizando var:

var meuNumero = 1;
var pessoa = new Pessoa();

Lembrando que uma vez que a variável recebe seu valor ao ser declarada com var, o tipo não pode mudar.

var meuNumero = 3;
meuNumero = "2"; // ERRO

Coleções

Arrays
int[] numeros = new int[3];

// cria um array de 4 posições com os valores 1, 2, 3 e 14.
int[] numeros = { 1, 2, 3, 14 };
Listas

List<TipoDeDados>: uma lista dinâmica de objetos.

List<int> listaDeNumeros = new List<int>();
listaDeNumeros.Add(1);
Dicionários

Dictionary<TipoDaChave,TipoDoValor>: uma coleção, identificada por uma chave (semelhante ao HashMap).

Dictionary<int, string> listaDeChamada = new Dictionary<int, string>();
listaDeChamada.Add(1, "Megaman");

Estruturas de decisão e repetição

if
if(/* ... */)
{
    //...
}
else if(/* ... */) 
{
    //...
}
else
{
    //...
}
for
for(int i = 0; i < 10; i++)
{
    //...
}
foreach
var listaDeNumeros = new List<int>();

foreach(int numero in listaDeNumeros)
{
    //...
}
while
while(true)
{
    //...
}
do while
do
{
    // faz uma vez, segue fazendo enquando a condição for *true*
} while(true);
switch
int numero = 1;
switch(numero)
{
    case 1:
        //...
        break;
    case 2:
        //...
        break;
    default:
        break;
}

Operador ternário

bool ok = 1 == 1;
string texto = ok ? "Deu Ok" : "Deu !Ok";

Enum

public enum Tamanho
{
    Pequeno,
    Medio,
    Grande,
    Titanic
}

//...

Tamanho t = Tamanho.Medio;

Classes

Definição básica:

{visibilidade} class {nome-da-classe}

Exemplo:

public class NomeDaClasse
{

}

Onde {visibilidade} pode ser:

  • public: todos podem ver a classe.
  • internal: pode ser visto somente dentro da biblioteca.
  • omitido: vira internal.

Onde {nome-da-classe} é o nome em PascalCase.

Métodos

Declaração básica: {visibilidade} {tipo-retorno} {nome} ({parametros})

Onde:

  • {visibilidade}
    • public: todos podem chamar.
    • private: pode chamar somente dentro da classe.
    • protected: pode chamar somente dentro da hierarquia.
    • internal: pode chamar dentro da biblioteca.
    • sem modificador: por default, private.
  • {tipo-retorno}: o tipo de retorno do método.
  • {nome}: nome do método em PascalCase
  • {parametros}: a lista de parâmetros, separados por virgula
    • Segue o padrão {tipo} {nome}, onde:
      • {tipo}: é o tipo do parâmetro.
      • {nome}: é o nome do parâmetro em camelCase



Exemplos de Método:

public void Iniciar()
{   
}

public int Somar(int numero1, int numero2)
{
    return numero1 + numero2;
}
Propriedades

Em java provavelmente você faria assim:

public class Mago {
    private String nome;

    public String getNome() {
        return this.nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
}

Em CSharp, as propriedades são: {visibilidade} {tipo} {nome} {acesso}.
Onde:

  • {visibilidade}
    • public: todos podem chamar.
    • private: pode chamar somente dentro da classe.
    • protected: pode chamar somente dentro da hierarquia.
    • internal: pode chamar dentro da biblioteca.
  • {tipo}: é o tipo de valor da propriedade.
  • {nome}: é o nome da propriedade, em PascalCase
  • {acesso}: modificadores de acesso get e set.

Exemplos de Propriedade:

public class Arqueiro
{
    // esta é uma propriedade com public get e public set.
    public int Flechas { get; set; }

    // esta é uma propriedade com public get e private set.
    public int Flechas { get; private set; }

    // esta é uma propriedade com somente get, retornando uma valor fixo.
    public int Flechas
    {
        get
        {
            return 1;
        }
    }
}

DE-PARA Java -> CSharp

Propriedade com public get e public set:

// em java

private String nome;

public String getNome() {
  return nome;
}

public void setNome(String nome) {
  this.nome = nome;
}
// em C#
public string Nome { get; set; }

Propriedade com public get e private set:

// em java

private String nome;

public String getNome() {
  return nome;
}
// em C#
public string Nome { get; private set; }

Propriedade que muda o valor no get, mas o set é normal

// em java
private String nome;

public void setNome(nome) {
  this.nome = nome;
}

public String getNome() {
  String novoNome = "...";
  // faz alguma alteracão com a variável nome
  return novoNome;
}
// em c#
private string nome;

public string Nome
{
  get
  {
    string novoNome = "...";
    // faz alguma alteracão com a variável nome
    return novoNome;
  }
  set
  {
    this.nome = value;
  }
}
Namespaces:

Semelhante ao package do JAVA, indica o "endereço" de um conjunto de classes.
Uma classe deve pertencer à um endereço.

namespace Pacote.Utilitarios 
{
    public class GeradorDeLeroLero
    {
        public void FazNada()
        {

        }
    }
}

As classes que estiverem no mesmo namespace podem usar as outras sem alteração.
Caso queira utilizar uma classe de outro pacote, precisamos utilizar um using.

using Pacote.Utilitarios;

namespace OutroPacote
{
    public class OutraClasse
    {
        public void FazAlgo()
        {
            // sem usar o using, podemos usar assim:
            // var gerador = new Pacote.Utilitarios.GeradorDeLeroLero();

            // com o using, podemos usar assim:
            var gerador = new GeradorDeLeroLero();
            gerador.FazNada();
        }
    }
}
Instâncias de objetos
public class Pessoa
{
    public string Nome { get; set; }
}

...
Pessoa p1 = new Pessoa();
p1.Nome = "João";
...
var p2 = new Pessoa();
...
Pessoa p3;
p3 = new Pessoa();

Poliformismo

Classe abstrata
public abstract class Personagem
{

}
Contrutor
public class Guerreiro
{
    public Guerreiro(int vida)
    {
        this.Vida = vida;
    }
}
Herança de Classes

Para extender uma classe, usamos :

public class Guerreiro : Personagem
{

}
Interface

Para implementar uma interface, também usamos :.

public interface IAeronave
{
    // pode ter propriedades
    int Altura { get; }

    // pode ter metodos
    void Voar();
}

// Implementando uma interface
public class CarroVoador : IAeronave
{
    ...
}

// Extendendo uma classe e implementando uma interface
// Primeiro vem a classe, depois as interfaces
public class CarroVoador : Carro, IAeronave
{
    ...   
}
Sobrescrita de Métodos

Métodos virtual permitem a sobrescrita, sem ele não é possível.
Métodos abstract obrigam o filho a implementar.

public abstract class Carro
{
    // um método que não seja virtual não pode ser sobrescrito no filho.
    public virtual void Andar()
    {
        // tem comportamento padrão...
    }

    // obriga o filho a implementar.
    public abstract void Andar();
}

// Sobrescrevendo
public class Fusca : Carro
{
    public override void Andar()
    {
        ...
    }
}
Sobrescrita de propriedades

Os mesmos modificadores (virtual e abstract) são aplicados às propriedades.

public abstract class Personagem
{
    // obriga o filho a implementar
    public abstract int Ataque { get; }
}

Linq/Lambda

https://www.caelum.com.br/apostila-csharp-orientacao-objetos/linq-e-lambda/#21-1-filtros-utilizando-o-linq

101 Exemplos:

ASP.NET MVC

É a implementação feita pela Microsoft do padrão MVC (Model-View-Controller). O Pattern MVC já existia há bastante tempo, ficou muito famoso através da linguagem Ruby, com o framework Ruby on rails. Ruby on rails é o MVC do Ruby. ASP.NET MVC é o MVC do .NET. Mas o conceito MVC já existia muito antes da Web.

O principal objetivo do MVC é separar a apresentação da regra de negócio. Muito diferente de como era no Web Forms.

No entanto o MVC ainda é apenas um pattern de apresentação! Normalmente há muitos outros patterns envolvidos em um projeto de um software.

Um servidor HTTP

Antes de entrar no workflow do MVC é importante entender como funciona um servidor Web e para isso é fundamental entender o funcionamento do HTTP.

HTTP

Hypertext Transfer Protocol, como o nome já diz, é um protocolo, o protocolo de comunicação pilar da Web. Dentro dele existem dois conceitos super importantes chamados de request e response, nos quais todos desenvolvedores Web deveriam entender. Para isso, dificilmente exista algum artigo mais explicativo do que esse.

Agora sim, M-V-C:

mvc

Vamos criar nosso primeiro projeto e mergulhar um pouco mais a fundo em cada um desses conceitos.

Convention over Configuration

Busca por views

Quando a Controller retornar uma View sem especificar seu nome, a engine do MVC tentará procurar uma View com o mesmo nome da Action. Ou seja:

public class ExemploController : Controller
{  
    public ActionResult Teste()
    {
        return View();
    }
}

O primeiro lugar que a engine irá procurar será:

~/Views/Exemplo/Teste.cshtml

Também irá procurar na pasta compartilhada (Shared):

~/Views/Shared/Teste.cshtml

Caso queira retornar uma view que fuja dessas convenções basta referenciar o caminho completo até ela:

return View("~/Views/Produto/Cadastro.cshtml");

Editor templates

http://www.hanselman.com/blog/ASPNETMVCDisplayTemplateAndEditorTemplatesForEntityFrameworkDbGeographySpatialTypes.aspx

results matching ""

    No results matching ""