domingo, 2 de dezembro de 2012

Reference-Types

Reference-types armazenam a informação numa área de memoria chama heap, e o endereço desse informação fica na stack, ao contrario dos value-types que armazenam a informação diretamente no stack.

A Principal diferença, é quando se copia uma variável do tipo value-type, para outra, você copia o valor real, e as duas variáveis trabalham de forma independente.

você diz para o processador "copia o VALOR dessa variável para a outra"

Quando você copia uma variável tipo reference-type para outra, você copia o endereço de memoria, para a informação, sendo assim as duas variáveis miram para a MESMA informação.

você diz para o compilador "copia a REFERÊNCIA (endereço, para onde ela aponta) dessa variável para a outra"

segunda-feira, 26 de novembro de 2012

Lesson 2 - Reference Types


Objetivos dessa lição


  • A Diferença entre value-types e reference-types
  • Descrever a diferença entre os tipos quando se associa valores
  • Listar os built-in types(confesso que não vejo importancia)
  • Descrever quando deve usar o StringBuilder
  • Criar e Ordenar Arrays
  • Abrir, Ler , Escrever e Fechar arquivos
  • Detectar e tratar exceções

Tempo Estimado : 40 Minutos

A partir de agora marcarei o tempo para ver se consigo atender dentro do esperado

segunda-feira, 19 de novembro de 2012

Enums


Lendo o Profissional C# e a Plataforma .NET 3.5

temos uma referencia bem maior sobre enums, e deu pra conhecer um pouquinho mais

Enums são uma estrutura de Par/Valor, por default o tipo do Valor é int, mas aceita Byte, short, int ou long

os Enums fazem parte da base do .NET, junto com Classes, Structs, Interfaces e Delegates (delegates os quais preciso compreender melhor !)

70-536 Exercicios Cap 1 Les 1


Código no github, espero q o link esteja correto !

https://github.com/FelipeUsuk/MS70-536/tree/master/Lesson1Ex1

Exercicios extremamente simples, criação de um struct, um override do método ToString() e a criação de um Enum

Acho que o livro deveria explicar um pouco mais sobre os enums, é um trecho extremamente curto, pesquisarei mais sobre eles para o próximo post !

os Entendimentos finais são :

Value-Types são mais rapidos, porém limitados a 16 bytes
Enumerators servem pra deixar o código mais legivel

quarta-feira, 7 de novembro de 2012

Enumerator


Enums são uma serie de simbolos, que são usados para representar algo,  dar escolhas ao desenvolvedor e facilitar a leitura do código.

Por exemplo podemos ter um Enum, de estado de um equipamento

Enum estado : int
{
On,
Off,
Sleep
};

Assim o estado são representados em On, Off e Sleep

Caso não tivessemos os Enums, provavelmente você definiria 0,1 e 2
e teria que ter comentários e documentações para saber o que significa cada estado....

Operator



Operator é uma Keyword que eu não conhecia e achei extremamente útil,
ela define como a sua classe ou struct vai processar comandos com operadores matematicos

Exemplo, iremos criar uma struct chamada CotacaoMoeda, que vai ter os valores de compra e venda de uma moeda, e iremos implementar o Operator +

assim quando utilizarmos alguma instancia de cotação moeda, e utilizarmos o operador + , iremos adicionar esse valor, nas duas propriedades

Criação

Struct CotacaoMoeda
{
float Compra;
float Venda;

public CotacaoMoeda(float _Compra, float _Venda)
{
Compra = _Compra;
Venda = _Venda;
}
}



public static CotacaoMoeda Operator +(CotacaoMoeda arg1, float arg2)
{
arg1.Compra += arg2;
arg1.Venda += arg2;
}

}




Consumo

CotacaoMoeda Dollar = new Dollar(1.37f, 1.35f);

// entrará no nosso mode Operator + e somará esse valor as duas //propriedades

Dollar + 0.05f;

User-defined types


User-defined types são as famosas Structs, como structs são value-types, tem a vantagem de serem armazenadas no stack da memoria, e trabalham como uma classe, inclusive para fazer uma struct se transformar em uma classe, basta trocar a Keyword struct por class.


Uma struct deve ser criada ao inves de uma classe, quando:


  • Lógicamente possa ser representada por um valor simples
  • Sua instancia seja menor do que 16 bytes
  • Que ela não vá receber alterações
  • Que não vai ser convertida em um reference-type


Exemplos


Pontos Cartesianos XY, precisam apenas de 2 variaveis para armazenar seus valores, pois é um conceito fixo, que não vai sofrer alterações por causa de regras de negócio.


Entendimento

Quando a necessidade de se criar objetos simples, e imutáveis, que vão precisar de menos de 16bytes para serem representados, ou seja suas propriedades somadas, não somem 16bytes, as structs são mais indicadas, pois ficam armazenadas no stack e assim possuem acesso mais rápido aumentando o seu desempenho.


No caso dos pontos cartesianos, a não ser que seja escolhido o tipo Decimal para representar os pontos, como só é necessário os pontos X e Y (2 variaveis)

se for escolhido Int ou float , a classe ocuparia 8 bytes (4 para cada variavel), se for escolhido long ou double, a classe ocuparia 16 bytes (8 para cada variavel) porém caso a precisão seja em Decimal ai ocuparia 32 bytes, pois cada decimal consome 16bytes