terça-feira, 7 de julho de 2009

Structure

É possível criar suas próprias estruturas de dados no .Net.

Estruturas e classes são muito parecidas. Enquanto as funcionalidades são similares, estruturas são usualmente mais eficientes que classes. Você deve definir estruturas, tanto quanto classes, se o tipo realizar melhor como um “value type” do que como um “reference type”, Em questão, estruturas devem ser utilizadas seguindo os critérios abaixo:

- Logicamente representar um valor simples
- Ter um tamanho de instancia menor que 16 bytes
- Não deve ser mudado depois da criação
- Não deve ser transformado (Cast) em um tipo de referência

Abaixo segue o código do livro que estou estudando com um exemplo bem simples.
---------------------------
Imports System.Drawing

Partial Public Class StructureCycle
Inherits System.Web.UI.Page

Structure Cycle
Dim _val, _min, _max As Integer

Public Sub New(ByVal min As Integer, ByVal max As Integer)
_val = min : _min = min : _max = max
End Sub

Public Property Value() As Integer
Get
Return _val
End Get
Set(ByVal value As Integer)
If value > _max Then
_val = _min
ElseIf value < _min Then
_val = _max
Else
_val = value
End If
End Set
End Property

Public Overrides Function ToString() As String
Return Value.ToString
End Function

Public Function ToInteger() As Integer
Return Value
End Function

Public Shared Operator +(ByVal arg1 As Cycle, ByVal arg2 As Integer) As Cycle
arg1.Value += arg2
Return arg1
End Operator

Public Shared Operator -(ByVal arg1 As Cycle, ByVal arg2 As Integer) As Cycle
arg1.Value -= arg2
Return arg1
End Operator

End Structure


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim degrees As New Cycle(0, 359), quarters As New Cycle(1, 4)

For i As Integer = 0 To 8
degrees += 90 : quarters += 1
Response.Write("degrees = " & degrees.ToString & " quarters = " & quarters.ToString & "
")

Next

End Sub

End Class
---------------------------
O resultado mostra:

degrees = 90 quarters = 2
degrees = 180 quarters = 3
degrees = 270 quarters = 4
degrees = 0 quarters = 1
degrees = 90 quarters = 2
degrees = 180 quarters = 3
degrees = 270 quarters = 4
degrees = 0 quarters = 1
degrees = 90 quarters = 2

Declare Value Types as Nullable

Já postei algo sobre declaração de Value Types, e achei uma dica bem interessante.
Podemos criar variáveis e inicializá-las com o valor “Nullable”, ou seja, vazio (taaa vaziiiiiiiiiii).

Um bom exemplo é utilizar quando estamos criando um questionário e desejamos saber se uma pergunta foi respondida. Segue o código abaixo

--------------------------
Dim b As Nullable(Of Boolean) = Nothing

If b.HasValue Then
Response.Write(b.ToString)
Else
Response.Write("Não tem conteúdo")
End If
--------------------------

Quando declaramos uma variável como Nuillable, podemos utilizar os membros “HasValue” e “value”.

Chegaram os livros

Quem diria que seria tão rápido. A Amazon superou as minhas expectativas. Fiz o pedido dos livros para certificação (http://www.amazon.com/Self-Paced-Training-70-536-70-528-70-547/dp/0735623767/ref=sr_1_3?ie=UTF8&s=books&qid=1245672888&sr=1-3) dia 23/Junho e a previsão de entrega era dia 30/Jul (37 dias). Ontem dia 06/Jul (14 dias) o pedido estava na portaria de casa. Chegou mais rápido do que fazer a compra em qualquer livraria do Brasil e custando menos da metade do preço (O total do pedido ficou em $ 110,00, cerca de R$ 220,00. Se eu comprasse na livraria custaria cerca de R$ 500,00).

Meu primeiro pedido na Amazon com entrega no Brasil foi mais de que aprovado!!!

Vou começar pelo livro do Exame 70-536 que tem cerca de 1000 páginas. Vou ter que organizar os estudos para que o mesmo não fique muito extenso. Assim que conseguir, postarei novas dicas.

Enquanto isso, fiquem ligados nos conteúdos postados na sessão .Net para o Exame 70-536.

quarta-feira, 1 de julho de 2009

Boxing and UnBoxing

Sobre esse "teoria" eu nunca tinha ouvido falar, mas é um conceito bem simples, desde que seja tomado alguns cuidados de "cast".

O que é Boxing e UnBoxing?
Com certeza não tem nada a ver com esportes sangrentos, hehehe...

O .NET Framework possui duas grandes divisões em seus tipos de dados, os Value Types (Tipos por Valor) e os Reference Types (Tipos por Referência). Os Value Types são armazenados na stack e os Reference Types são armazenados na heap (memória).

Chamamos de Boxing a conversão de um Value Type para um Reference Type e à conversão de volta de um Reference Type para um Value Type damos o nome de Unboxing. Agora uma breve explicação sobre tipos no Framework.

No link a seguir existe um post de CRISTIAN FERNANDES com uma explicação muito legal de como funciona (http://www.devmedia.com.br/articles/viewcomp.asp?comp=6962). Acho interessante também fazer simulações com o VB.net para testar o Boxing e UnBoxing.

Regards!

Exception classes

Bom dia pessoal.

O próximo conteúdo que estou estudando é "Exception classes".
Essa classe é derivada de System e trata qualquer erro que exista em sua aplicação.
Lembrando que sempre é necessário utilizar o bloco try catch para tratar a exception.

Nesse link existe uma explicação básica sobre como utilizar o try catch e tratar excessões diferentes (http://www.dotnetspider.com/tutorials/DotNet-Tutorial-286.aspx).

Muita gente esquece que também existe o bloco de código finally. Quando uma excessão ocorre, ela entra no bloco catch, quando o tipo de erro tratado condiz com o erro gerado. E depois sempre passa pelo bloco finally, caso exista.

O mais interessante que achei foi este artigo que mostra como criar sua própria classe de erro para que não seja necessário repetir o código dentro do seu projeto. Vale a pena utilizar a idéia.
http://www.linhadecodigo.com.br/Artigo.aspx?id=925

segunda-feira, 29 de junho de 2009

Generic types

Enquanto meus livros para as provas de .Net não chegam (pedidos na Amazon) peguei o conteúdo do exam 70-536 (http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-536&locale=en-us#tab2) e estou estudando pela internet.

Falando sobre Generic types, achei um pouco de dificuldade nos primeiros sites, mas depois encontrei uma boa explicação e porque utilizar (http://www.ondotnet.com/pub/a/dotnet/2004/05/25/whidbey_vbnet_pt2.html).

Generic types nada mais é que utilizar um tipo genérico de dados para que sua classe, método consigam trabalhar com qualquer tipo de dados.
Dai vem a pergunta: Mas porque não utilizo o tipo "Object"?
Dependendo do tipo de dado que você estiver trabalhando, o cast não é automático e pode gerar um erro em tempo de execução. Mais explicações com código fonte no link acima.

Obrigado e até o próximo post!

quarta-feira, 17 de junho de 2009