André's profileTalking about Software D...PhotosBlogListsMore ![]() | Help |
Talking about Software Development, Technology and more... |
||||||||||||||||||||||||||||||||
|
|
June 17 Fuso HorárioFuso Horário
No meio desse viaja pra cá e pra lá, acabei reparando em uma coisa que não tinha reparado antes...
Estava dando uma olhada em um site que mostra o horário atual em diversos países (http://www.timeanddate.com/worldclock/) e reparei que tem alguns lugares do mundo em que o fuso não respeita a quantidade de uma hora, mas sim, meia hora ou até mesmo 15 minutos!
Um exemplo é o Nepal, que está a +05:15 horas do GMT... Imagina só que louca a comunicação internacional desses países?
Acabei indo investigar melhor e descobri que parece que esse negócio de fuso na realidade é uma zona total... Pra quem se interessar, dê uma olhada nestes dois artigos:
André Alves de Lima. May 12 Namespaces, Classes Parciais e Métodos Virtuais em C#Namespaces, Classes Parciais e Métodos Virtuais em C#
Fala galera, tudo em cima?
Acabou de ser publicado no portal Linha de Código um vídeo que fiz sobre namespaces, classes parciais e métodos virtuais em C#. Aí vai o link do portal de vídeos:
Escrevi também um artigo sobre o mesmo tema no site dos Raptors:
Aí vai o texto do mesmo, para ficar registrado no blog também...
1. Introdução Este artigo abordará, com exemplos práticos, alguns conceitos básicos do .Net Framework, que são os Namespaces, Classes Parciais e Métodos Virtuais. Esses temas são básicos para quem está iniciando, mas muitas pessoas acabam ficando com dúvidas e até mesmo acabam utilizando-os de maneira errada. Iniciemos então com o primeiro tema – namespaces. 2. Namespaces O conceito de namespace foi criado para nos ajudar a organizar melhor nossos códigos. Eles podem ser entendidos como “categorias” ou “blocos” que contêm trechos de código. Um bom exemplo de utilização de namespaces é encontrado no próprio .Net Framework, que é todo separado em categorias – ou namespaces (System.Data, System.Collections, System.IO, etc.). Quando criamos um projeto, o Visual Studio já cria um namespace utilizando o mesmo nome do projeto. Então, se criarmos uma Console Application em C# utilizando o nome NamespacesDemo, o Visual Studio nos criará o seguinte trecho de código: using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace NamespacesDemo { class Program { static void Main(string[] args) { } } } Pelo trecho de código acima, podemos notar que a declaração de namespaces em C# é feita através da palavra reservada namespace seguida do nome que desejamos associar ao namespace criado. 2.1. Aninhamento de Namespaces Com o aninhamento de namespaces, podemos incluir namespaces dentro de outros. Abaixo temos um exemplo de como poderia ser a estrutura de namespaces de um sistema relacionado à educação: using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace NamespacesDemo { namespace Matematica { namespace Algebra { class MatematicaAlgebra { private int _codigo;
public int Codigo { get { return _codigo; } set { _codigo = value; } } } } } namespace Fisica { namespace Mecanica {
} } } Podemos notar que dentro do namespace “NapespacesDemo”, temos outros dois namespaces: “Matematica” e “Fisica”, e estes também contêm outros namespaces. 2.2. A cláusula “using” Para utilizarmos as classes de outros namespaces que não o atual, podemos informar no código o caminho completo da classe (incluindo o namespace), como podemos verificar no código abaixo, que utiliza a classe MatematicaAlgebra do namespace NamespacesDemo.Matematica.Algebra: using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace NamespacesDemo { class Cliente { private void UsaMatematica() { Matematica.Algebra.MatematicaAlgebra _meuObjeto = new Matematica.Algebra.MatematicaAlgebra(); } } } Outra opção para acessarmos a mesma classe sem utilizar o caminho completo da mesma, seria definir seu namespace utilizando a palavra reservada using. Com isso, nosso código ficaria o seguinte: using System; using System.Collections.Generic; using System.Linq; using System.Text; using NamespacesDemo.Matematica.Algebra;
namespace NamespacesDemo { class Cliente { private void UsaMatematica() { MatematicaAlgebra _meuObjeto = new MatematicaAlgebra(); } } } 2.3. Apelidos de namespaces Podemos criar apelidos para nossos namespaces, também chamados de aliases. Para isso, podemos utilizar a seguinte sintaxe: using System; using System.Collections.Generic; using System.Linq; using System.Text; using alg = NamespacesDemo.Matematica.Algebra;
namespace NamespacesDemo { class Cliente { private void UsaMatematica() { alg.MatematicaAlgebra _meuObjeto = new alg.MatematicaAlgebra(); } } } 3. Classes Parciais O conceito de classes parciais presente no .Net Framework serve para dividir o código de nossas estruturas em dois ou mais arquivos fonte. As estruturas passíveis a essa divisão são classes, structs e interfaces. As classes parciais nos possibilitam uma melhor organização do nosso código, visto que podemos distribuir o código de uma classe grande em vários arquivos (por exemplo, podemos escrever os atributos, propriedades e construtores da classe em um fonte e os métodos e funções em outro fonte). Abaixo veremos um exemplo de uma classe chamada Coordenada que foi dividida em dois arquivos fonte: Coordenada.cs e CoordenadaMetodos.cs: Coordenada.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace NamespacesDemo { public partial class Coordenada { private int _x;
public int X { get { return _x; } set { _x = value; } } private int _y;
public int Y { get { return _y; } set { _y = value; } } } } CoordenadaMetodos.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace NamespacesDemo { public partial class Coordenada { public void PrintCoordenadas() { Console.WriteLine(this._x.ToString() + " " + this._y); } } } Como podemos verificar nos códigos acima, separamos os atributos e propriedades da classe Coodenada no arquivo fonte Coordenada.cs e o método PrintCoordenadas no arquivo fonte CoordenadaMetodos.cs. Para indicar que uma classe está dividida em mais de um arquivo fonte, utilizamos a palavra reservada partial. Ao compilar o código, o .Net acaba juntando o conteúdo dos dois arquivos fonte em um só, para chegar ao código completo da classe Coordenada. Se repararmos nos arquivos criados ao adicionarmos um form em um projeto Windows Forms, percebemos que o Visual Studio na verdade separa o código em dois arquivos: um fonte contém o código de design do form, que vai sendo criado pelo Visual Studio ao customizarmos suas propriedades pelo editor visual e outro fonte contém o restante do código do form (implementação de eventos, métodos, etc.). 4. Métodos Virtuais Métodos virtuais foram criados para que as linguagens orientadas a objetos expressem o polimorfismo, ou seja, a permissão de escrevermos um método em uma classe derivada com a mesma assinatura da classe base. Em C#, para indicar que um método poderá ser escrito com a mesma assinatura em uma classe derivada, utilizamos a palavra reservada virtual na classe base e a palavra reservada override na classe derivada, como podemos verificar no código abaixo: using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace NamespacesDemo { class FormaGeometrica { public virtual void ImprimeFormulaDaArea() { Console.WriteLine("Sem saber a forma, eu nao sei a formula da area."); } }
class Circulo : FormaGeometrica { public override void ImprimeFormulaDaArea() { base.ImprimeFormulaDaArea(); Console.WriteLine("A formula do Circulo é pi * r^2"); } } } Como podemos observar, o exemplo acima implementa duas classes: FormaGeometrica e Circulo (que é uma especificação da classe FormaGeometrica). O método ImprimeFormulaDaArea foi definido como virtual na classe base, o que indica que ele poderá ser sobreposto por um método nas classes que a herdarem. Isso é o que pode ser verificado na implementação do mesmo método na classe derivada Circulo, onde utilizamos a palavra reservada override, para indicar que esse código é uma sobreposição do método com mesmo nome da classe base. Se quisermos ainda executar também o código da classe base, além do código da classe derivada, podemos utilizar a palavra reservada base, como foi feito com a chamada base.ImprimeFormulaDaArea no código acima. Bom, vamos ficando por aqui. Espero que tenham gostado e, até a próxima!
André Alves de Lima. April 02 Evitar expansão da TreeView ao clicar no "+"Evitar expansão da TreeView ao clicar no "+"
Fala galera!
Esses dias eu estava respondendo umas dúvidas no fórum de C# no MSDN e acabei chegando em uma dúvida interessante...
Por algum motivo (explicado no post), o desenvolvedor queria evitar que o nó da TreeView expandisse quando o usuário clicasse no símbolo de "+" (contudo, sem remover o símbolo da TreeView), fazendo com que a expansão / retração fosse somente executada quando o usuário desse um duplo clique no nó...
Aí fui procurar na Internet pra ver se alguém já tinha feito isso... Como não achei nada, fui tentar implementar... E acabei chegando na seguinte solução:
public partial class Form1 : Form
{ private bool _doubleClick = false; public Form1() { InitializeComponent(); } private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) { if (!_doubleClick.Equals(true)) e.Cancel = true; else _doubleClick = false; } private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { _doubleClick = true; e.Node.Expand(); } } Basicamente, criei um atributo chamado _doubleClick, que sempre estará setado como falso, a não ser que um nó tenha sofrido um duplo clique (tratamento através do evento NoveMouseDoubleClick da TreeView). No evento BeforeExpand da TreeView, a gente verifica se esse atributo está true ou false, e faz o tratamento desejado (cancelando ou não a expansão do nó)... Não sei se tem um jeito melhor de fazer, mas, dessa forma funcionou belezinha... =)
Para referência, o link do post é:
http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/990afef6-7d9f-42d1-adbd-2ad36fb76a7f Até a próxima!
André Alves de Lima. February 12 Coitado do futuro marido dela...Agradeço a sua visita!
|
Public folders ![]() 2008/08/28 - Monte Dourado / Pará
![]() 2008/09/19 - Scotland / UK
![]() Águas de Lindóia - 2008/05/01
![]() Aniversário da Clara / Clara's Birthday [22/06/2007 - 23/06/2007]
![]() Brasília [02/06/2007 - 04/06/2007]
![]() Casamento
![]() Community Zone 2007
![]() CommunityZone 2008
![]() Eu + Lari - Histórico
![]() Final de Semana em Osasco - 27-08-2006
![]() Fotos da Clara
![]() Fotos do Meu Blog
![]() Letônia - 2008/05/16 - 2008/07/07
![]() Noivado
![]() Pics
![]() Primórdios da Faculdade (2003)
![]() Public
![]() Reunião Raptors - 05/05/2007
![]() São José dos Campos - Aug/2008
![]() TechEd 2007
![]() ToolstripInheritance
|
||||||||||||||||||||||||||||||
|
|