Definindo Classes e Criando Objetos

Classe é a definição para um tipo definido pelo usuário (UDT). Objeto é simplesmente um termo descrevendo uma determinada instância de uma classe na memória. No C#, a keyword new é o caminho para criar um objeto.

Para ilustrar o procedimento próprio para criação de objeto, observe abaixo:

using System;

class HelloClass

{

public static int Main(string[] args)

{

// Você pode declarar e criar um novo objeto em uma simples linha...

HelloClass c1 = new HelloClass();

// ... ou quebrar a declaração e criação em duas linhas.

HelloClass c2;

c2 = new HelloClass();

...

}

}

A keyword new, toma conta de calcular o número correto de bytes para o objeto especificado e adquirindo memória suficiente do managed heap. Aqui você alocou dois objetos da classe HeloClass. Variáveis de objeto em C#, realmente são uma referência ao objeto na memória, não o próprio objeto em si. Assim, c1 e c2 referenciam um único HelloClass objeto alocado na memória heap.

O papel dos Construtores

Toda classe em C#, possui um construtor padrão que você pode redefinir se necessário.

// HelloClass, com construtores

using System;

class HelloClass

{

public string strMensagem;

// Construtor padrão

public HelloClass()

{

Console.WriteLine("Construtor padrão chamado!");

}

// Construtor customizado

public HelloClass (string msg)

{

Console.WriteLine("Construtor customizado chamado!");

strMensagem = msg;

}

// Ponto de entrada do programa

public static int Main(string[] args)

{

// Chamando o construtor padrão

HelloClass c1 = new HelloClass();

Console.WriteLine("Mensagem do usuário: {0}\n", c1.strMensagem);

// Chamando o construtor customizado

HelloClass c2;

c2 = new HelloClass("Testando, 1, 2, 3");

Console.WriteLine("Mensagem do usuário: {0}", c2.strMensagem);

Console.ReadLine();

return 0;

}

}

Definindo uma Aplicação Objeto

Vamos fazer uma reengenharia do programa para OO.

using System;

namespace HelloExemplo

{

#region Classe HelloClass

class HelloClass

{

// Ponto de estado dos dados

public string strMensagem ;

// Construtor padrão

public HelloClass()

{

Console.WriteLine("Construtor padrão chamado!");

}

// Construtor customizado

public HelloClass(string msg)

{

Console.WriteLine("Construtor customizado chamado!");

strMensagem = msg;

}

public void ListarMensagem()

{

Console.WriteLine("Mensagem: {0}", strMensagem );

}

}

#endregion

class HelloApp

{

// Ponto de entrada do programa.

public static int Main(string[] args)

{

#region Processa Command Line Args...

// Processa command line arguments...

Console.WriteLine("***** Command line args *****");

for (int x = 0; x < args.Length; x++)

{

Console.WriteLine("Argumentos: {0}", args[x]);

}

// Usando foreach!

Console.WriteLine("\n***** Você perdeu isso *****");

foreach (string s in args)

Console.WriteLine("Argumentos: {0}", s);

// Usando System.Environment

Console.WriteLine("\n***** Usando System.Environment *****");

string[] theArgs = Environment.GetCommandLineArgs();

Console.WriteLine(" O path para essa aplicação é: {0}", theArgs[0]);

for (int i = 1; i < theArgs.Length; i++)

Console.WriteLine("Argumentos: {0}", theArgs[i]);

Console.WriteLine();

#endregion

#region Usando System.Environment

// OS?

Console.WriteLine("Sistema Operacional: {0} ", Environment.OSVersion);

// Diretório?

Console.WriteLine("Diretório: {0} ", Environment.CurrentDirectory);

// Drives.

string[] drives = Environment.GetLogicalDrives();

for (int i = 0; i < drives.Length; i++)

Console.WriteLine("Drives {0} : {1} ", i, drives[i]);

// Versão .NET?

Console.WriteLine("Versão .NET: {0} ", Environment.Version);

Console.WriteLine();

#endregion

// Chamando construtor padrão

HelloClass c1 = new HelloClass();

c1.ListarMensagem();

// Chamando construtor customizado

HelloClass c2;

c2 = new HelloClass("Testando, 1, 2, 3");

c2.ListarMensagem();

Console.ReadLine();

return 0;

}

}

}