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

terça-feira, 6 de novembro de 2012

Nullable

Nullable

O Nullable é uma variável que pode ser Nula, parece óbvio mas é interessante.

Por que se por exemplo tentarmos fazer o seguinte, declarar uma variavel tipo bool, e setar ela como null


 class Program
    {
        static void Main(string[] args)
        {
            bool b = null;
            Console.Write(b);
            Console.ReadKey();
        }
    }

Teremos o seguinte erro em compilação

Error 1 Cannot convert null to 'bool' because it is a non-nullable value type C:\Users\Felipe\AppData\Local\Temporary Projects\NullableTeste\Program.cs 12 22 NullableTeste

Se tentarmos declarar ela, não definir um valor inicial e tentar usa-la


 class Program
    {
        static void Main(string[] args)
        {
            bool b;
            Console.Write(b);
            Console.ReadKey();

        }
    }

Teremos novamente erro em compilação


Error 1 Use of unassigned local variable 'b' C:\Users\Felipe\AppData\Local\Temporary Projects\NullableTeste\Program.cs 13 27 NullableTeste


-----

Caso você precisa por exemplo de uma variavel resposta, que pode ser "V, F" OU  o usuario não preencheu "null"

você tem que usar o Nullable


 class Program
    {
        static void Main(string[] args)
        {
            Nullable b = null;
            Console.Write(b);
            Console.ReadKey();
        }
    }

Na prática, acho que deve ser muito difícil a utilização desse tipo de variável  porém pode ser útil em algumas situações





Cap 1 Lesson 1

Entendimento

Variáveis do tipo ValueTypes, tem seu valor armazenado diretamente no stack da memória, e podem ser consumidas rapidamentes e com pouco consumo de processamento (overhead?), comumente representam valores simples, e possuem construtores implicitos, não precisando da KeyWord "New" quando for instaciada

Structs e Enumerators são ValueTypes

Exemplo de ValueTypes

bool b = false;
int i = 0;
int j;

Boas Práticas C# 1




Para inteiros:
Int32 e UInt32 tem a performance otimizada pelo framework

Para pontos-flutuantes:
Double é mais eficiente , pois suas operações são otimizadas no hardware

MCTS 70536

Começando pela 3º vez......

Dessa vez usarei o blog de forma de bloco de anotações

Capitulo 1 do livro

Objetivo do capitulo 1

Gerenciar dados

  • Value Types
  • Reference Types
  • Attributes
  • Generic Types
  • Exception Classes
  • Boxing and Unboxing
  • TypeForwardedToAttribute Class
Implementar Interfaces

  • IComparable
  • IDisposable
  • IConvertible
  • ICloneable
  • IEquatable
  • IFormattable

Controlar interações entre os Componentes e aplicações do .Net Framework usando eventos e delegates
  • Delegate Class
  • EventArgs Class
  • EventHandler delegates
Conforme for realizando cada lição, vou fazendo upload dos códigos e comentando o que aprendi