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"
domingo, 2 de dezembro de 2012
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
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
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;
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
Controlar interações entre os Componentes e aplicações do .Net Framework usando eventos e delegates
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
- 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
Assinar:
Postagens (Atom)